show | version | enable_checker |
---|---|---|
step |
1.0 |
true |
- 上次我们了解了列表的加法
- 加法
- 加法的本质是将两个列表拼接
- 并将结果位置赋给帧(frame)上的变量来引用
- 对于两个列表求和并赋值有4种做法
- l1 = l1 + l2
- l1 += l2
- l1[-1:] = l2
- l1.extend(l2)
- 上述四种方法结果相同
- 但是稍有区别
- 第一种l1 = l1 + l2
- 会改变l1 所引用的地址
- 后三种不改变地址
- 第四种l1.extend(l2)
- 效率最高
- 在当前列表位置后继续扩展列表
- 第一种l1 = l1 + l2
- 但是稍有区别
- 既然列表有加法
- 那列表可以有乘法吗?🤔
- 那列表可以有乘法吗?🤔
- 字符串乘法
- 乘法的本质是累加
- 列表也能做乘法吗?
- 最大能有多少个元素呢?
- 5个9好像也没有问题
- 没有问题就继续试探
- 8个9之后自动退出python了
- 这实在是有问题啊
- 问题在哪儿呢?
- 怎么也没有报个Error啥的?
- range函数对应的列表也会发生同样的问题
- 但如果比八个九还多会如何呢?
- 9个9的时候就报一个内存错误
- 如果参数超过八字节的整数又会如何呢?
- 超过了八字节属于大数,不是一般的结构
- 加减乘除还有定义
- 但是想让他成为range的参数就不行了
- 因为没有相应的处理函数
- 在8字节里面也不是都能处理
- 说明python的解释器毕竟还是受到内存的物理限制的
- 东西太多了容易乱
- 我把列表清空吧
- 清空列表非常简单
- 但是这个和clear有什么区别呢?
- clear是将这个列表对象里面所有列表项清空
- 列表对象所引用的内存地址不变
- 将空列表赋给列表变量
- 原列表所引用的内存地址无人再引用
- 等待垃圾回收
- 新申请了一个内存空间放置空列表
- 让原来的变量名引用新分配的空列表
- 原列表所引用的内存地址无人再引用
- 两个空列表所引用的地址并不相等
- 虽然都是空列表
- 但是各有各的地址
- 空列表本质还是一个列表
- 并不是真的空
- 我想让他真的空
- 怎么办呢?
- None 的意思是
- 啥也不是
- 不是数字
- 不是字符串
- 不是列表
- 啥也不是
- None的类型是
- NoneType
- 啥类型不是
- 帮助说啥呢?
- 啥也没说
- 这样l1、l2就啥也不是了
- 因为他俩都啥也不是
- 所以相等了
- 所有None的地址相同
- 都是id(None)
- 可以打印观察
- print(id(None))
- 都是id(None)
-
None
- 啥也不是
-
[]
- 啥也没有的列表
- 空列表
-
空列表也可以有乘法吗
- 如果本身就是空列表
- 列表里面没有列表项
- 乘多少还是空的
- 但如果列表面有东西
- 乘出来列表项就翻倍了
- 即使里面是空列表
- 空列表对象也翻倍
- 这怎么理解?
- []是空列表
- 长度为0
- [[]]是有1个元素的列表
- 长度为1
- [[]]的第0个元素为[]
- [[]] * 3
- 就将这唯一的列表项[]
- 复制3次
- 还放在列表里
- 就是[[], [], []]
- 有点绕
- 乘法的结果可以增强赋值吗?
- 直接赋值修改原来引用的地址
- 增强赋值不修改原来引用的地址
- 规则和加法赋值类似
- 这次我们了解了列表的乘法运算
- 我们总结一下各种运算
- 赋值运算
- 直接用列表给对象赋值
- 使用列表地址
- 两个列表指向同一位置
- 制作副本的3种方法
- copy拷贝
- list构造函数
- slice切片
- 直接用列表给对象赋值
- 加法
- l1 = l1 + l2
- l1 += l2
- l1[-1:] = l2
- l1.extend(l2)
- 乘法
- 乘法的本质是累加
- 规则和加法类似
- 但是数据特别大时候会抛出异常
- 列表还有什么好玩的吗?🤔
- 下次再说 👋