实验1 列表中存的是什么?

输入

list1 = [coro1(), coro2()]

import sys

print("由两个协程对象构成的list1的占用字节是", sys.getsizeof(list1))

list2 = [1, 2]

print("由两个整型数字对象构成的list2的占用字节是", sys.getsizeof(list2))

list3 = []

print("空列表占用的字节是", sys.getsizeof(list3))

a = 1

print("数字1对象占用的字节是", sys.getsizeof(a))

b = coro1()

print("一个协程对象占用的字节是", sys.getsizeof(b))

print("由此可以知道64位系统上在列表中保存的是对象的64位引用地址,即8个字节")

输出

由两个协程对象构成的list1的占用字节是 80

由两个整型数字对象构成的list2的占用字节是 80

空列表占用的字节是 64

数字1占用的字节是 28

一个协程对象占用的字节是 88

由此可以知道64位系统上在列表中保存的是对象的64位引用地址,即8个字节

补充

80-64=16=8*2,对应列表中是2个元素。

coro1和coro2都是协程函数,见附1。

实验2 在列表循环中对列表进行删除操作,会不会出错?

输入

list1 = [1, 2, 3]

for i in list1:

print("当前的i是", i)

print("当前循环中的列表是", list1)

list1.remove(i)

print('\n',"!!!输出结果怎么不对,WTF,why the failure!!!")

print("原来是python在for中使用了自己的计数器")

print("如果对列表使用深拷贝再循环就好了", '\n')

list1 = [1, 2, 3]

for i in list(list1):

print("当前的i是", i)

print("当前循环中的列表是", list1)

list1.remove(i)

输出

当前的i是 1

当前循环中的列表是 [1, 2, 3]

当前的i是 3

当前循环中的列表是 [2, 3]

!!!输出结果怎么不对,WTF,why the failure!!!

原来是python在for中使用了自己的计数器

*如果对列表使用深拷贝再循环就好了 *

当前的i是 1

当前循环中的列表是 [1, 2, 3]

当前的i是 2

当前循环中的列表是 [2, 3]

当前的i是 3

当前循环中的列表是 [3]

测试图

·…·

补充

Python在for循环中根据自己的计数器对列表进行索引,所以一开始会出现在第二次循环中i为3的现象。

实验3 列表深复制到底复制的是什么?

输入

list1 = [coro1(), coro2(), 1, 2] # 提醒,coro1()返回一个协程对象

print("初始列表list1是", list1)

list2 = list1

print("浅复制的列表list2是", list2)

list3 = list(list1)

print("深复制的列表list3是", list3)

print("可以看出打印的内容都是一样的,内存地址相同,数字相同。")

print("下面对列表进行操作")

list1.remove(list1[0])

print("删除操作后初始列表list1是", list1)

print("删除操作后浅复制的列表list2是", list2)

print("删除操作后深复制的列表list3是", list3)

print("可以看出浅复制的列表受到了影响,而深复制的列表并没有受到影响")

print("但是如果使用列表中的协程对象呢")

list1[0].send(None)

list3[1].send(None)

print("两者操作的是同一个协程对象!")

print("深复制仅仅是新建了一份列表,不会更深一层到新建一个协程对象,由于深复制列表中的元素(实际是引用对象地址)和旧列表中一致,操作的对象其实还是一样的,但对列表的增删改不同。")

输出

初始列表list1是 [, , 1, 2]

浅复制的列表list2是 [, , 1, 2]

深复制的列表list3是 [, , 1, 2]

可以看出打印的内容都是一样的,内存地址相同,数字相同。

下面对列表进行操作

删除操作后初始列表list1是 [, 1, 2]

删除操作后浅复制的列表list2是 [, 1, 2]

删除操作后深复制的列表list3是 [, , 1, 2]

可以看出浅复制的列表受到了影响,而深复制的列表并没有受到影响

但是如果使用列表中的协程对象呢

C2: Start

C2: a

两者操作的是同一个协程对象!

深复制仅仅是新建了一份列表,不会更深一层到新建一个协程对象,由于深复制列表中的元素(实际是引用对象地址)和旧列表中一致,操作的对象其实还是一样的,但对列表的增删改不同。

补充

在复制由协程构成的列表时,我对深复制的概念产生了疑惑,以为深复制会产生新的协程,其实是协程对象在使用协程函数的时候产生,深复制就是对其引用地址的复制,并不改变协程本身。对于其他类型的对象也是一样的。

示意图

附1

from types import coroutine

# 通过装饰器产生基于生成器的协程对象

@coroutine

def switch():

yield

#python3.5实现的特性,参见PEP-0492

async def coro1():

print("C1: Start")

await switch()

print("C1: Stop")

async def coro2():

print("C2: Start")

await switch()

print("C2: a")

await switch()

print("C2: Stop")

coro1:返回协程的函数

python所有实验_python列表的小实验相关推荐

  1. BGP小实验(一)——小实验练练手走起来

    BGP小实验(一)--小实验练练手走起来 前言 一.需求 二.命令 1.基础配置走起来(端口+回环口IP,RIP及OSPF) R1 R2 R3 R4 R5 R6 R7 2.BGP走起来 R1 R2 R ...

  2. 【python】python学习之条件语句,小实验:商品打折后价格

    python学习之条件语句,用一个小实验来进行学习吧! price = float(input("请输入金额:\n")) if(price >= 100):if(price ...

  3. python制作冰花_【科学小实验】23.冻冰花

    原标题:[科学小实验]23.冻冰花 科学小实验---冻冰花 NO.23 同学们,你们喜欢花吗?那么你们知道冻冰花是什么呢?冻冰花漂亮吗?想知道的话就赶紧准备材料,跟小编姐姐一起制作冻冰花吧!⬇⬇⬇ 1 ...

  4. 用计算机做科学实验评课,科学小实验课程听课心得

    010在线为您甄选多篇描写科学小实验课程听课心得,科学小实验课程听课心得精选,科学小实验课程听课心得大全,有议论,叙事 ,想象等形式.文章字数有400字.600字.800字....缓存时间: 2021 ...

  5. python self理解_Python列表理解

    python self理解 In our previous tutorial we learned about Python Sort List. In this tutorial we will l ...

  6. 鸿蒙科学实验课,魔力科学小实验 | 画在盘子上的人像居然变活了!很少人发现这个秘密...

    让孩子像科学家一样思考,像工程师一样解决问题 各位小朋友及大朋友们,晚上好! 欢迎来到魔力科学小实验栏目, 让孩子像科学家一样思考! 相传古代有个叫马良的放牛娃, 拥有一支神奇的画笔, 无论画什么图案 ...

  7. python商品总价_【Python基础 | 列表】小实验:实现显示商品,选择商品,将商品加入购物车,得到总价格...

    B站学习<Python爬虫技术5天速成>时遇到的小作业,原视频点我 题目如下: 代码如下: products = [["iPhone", 6888], ["M ...

  8. 【Python基础 | 列表】小实验:实现显示商品,选择商品,将商品加入购物车,得到总价格

    B站学习<Python爬虫技术5天速成>时遇到的小作业,原视频点我 题目如下: 代码如下: products = [["iPhone", 6888], ["M ...

  9. python方法测试_python 测试常用小方法

    python 测试常用的小方法 def xia_to_tuo(src: str, firstUpper: bool = False): """ 将下划线分隔的名字,转换为 ...

最新文章

  1. 一个苹果手机移动电源也能让他拽得跟二五八万似的
  2. 数据库事务和spring事务的区别
  3. 计算机文档插入操作,电脑在word2007文档中插入数学公式的方法
  4. SAP SMW0 上传EXCEL模板遇到的问题
  5. 11行Python代码,发现了室友U盘的惊天秘密。
  6. Dlib-人脸识别API说明
  7. Python敏感词过滤DFA算法+免费附带敏感词库
  8. 16个大数据常见案例分享,看完别说还不懂大数据!
  9. 以直播场景为例对音视频相关概念扫盲
  10. Camera:双目成像原理
  11. PayPal如何提现人民币?PayPal提现到国内银行的最新教程!
  12. Python入门学习二:列表
  13. 刨根问底!!到底什么是文件?什么是流
  14. access横向求和sum_access 2007使用查询对数据求和
  15. 阿里云大数据ACP(三)可视化 Quick BI
  16. go语言关于线程与通道channal
  17. 七牛云的免费SSL证书申请和用法
  18. pandas 入门(pandas 数据结构介绍)
  19. IIR滤波器和FIR滤波器的区别与联系
  20. 计算机考试去底纹,2017职称计算机考试Word 2003知识点:段落添加边框和底纹

热门文章

  1. Python 之父退休,C 语言之父与世长辞,各大编程语言创始人现状大曝光!
  2. 拼夕夕订单超时未支付自动关闭实现方案!
  3. 【高并发解决方案】5、如何设计一个秒杀系统
  4. Excel和Word 简易工具类,JEasyPoi 2.1.5 版本发布
  5. 编程体系结构(03):Java集合容器
  6. Linux系统:centos7下安装Jdk8、Tomcat8、MySQL5.7环境
  7. 目标跟踪【更新中...】
  8. Linux用户管理命令(第二版)
  9. Dom4j工具--XML的DOM解析(下)--写操作
  10. 使用 Core Graphics 绘制基本形状