show | version | enable_checker |
---|---|---|
step |
1.0 |
true |
- 上次我们了解了元组
- 有了列表为什么还需要有元组呢?
- 因为元组不可变
- 列表可变
- 这就是差异化带来的存在感
- 怎么理解这个不可变(immutable)呢?🤔
- 元组的不可变指的是元组项序列
- 元组项序列不可更改顺序
- 元组项序列不可重新赋值
- 那如果对元组项重新赋值呢?
- 重新赋值
- 不是在原来尾号6736这个位置放入新的元组对象
- 而是新分配一个尾号5456的地址空间
- 在新空间里面构造新元组
- 即使元组一模一样
- 也得新分配空间
- 除了tuple还有什么是immutable的呢?
- tuple可以理解
- 但是数字和字符串为什么也是不可变的呢?
- 将1000赋给数字变量i
- i 引用尾号1728 的内存地址空间
- 尾号1728 的内存地址空间 里面存的是数字1000
- 再将1001赋给变量i
- 不是将 尾号1728 的内存地址空间 存的数字修改为1001
- 而是新分配地址空间 尾号1792
- 在里面存储1001
- 然后将尾号1792的地址空间赋给i
- 如果数字相同呢?
- 只要不是特别小的数字
- 特别小的数字会有小数据池
- 另行考虑
- 特别小的数字会有小数据池
- 都会引用一个新的数字类型的地址空间
- i 是一个变量名
- 引用的是数字常量的地址空间
- 数字常量不能修改
- 但是变量名可以引用不同的数字常量
- 再看看字符串
- 字符串的情况也是一样的
- 每个分配了空间的字符串都是常量
- immutable的
- 同一个字符串变量名可以指向不同的字符串常量
- 将字节序列b"\x00\x01"解包
- 得到的数字序列是不可变的
- 所以这个结果的类型是元组(tuple)
- 而不是可变的列表(list)
import time
localtime = time.localtime()
print(localtime)
print(type(localtime))
for num in range(9):
print(localtime[num])
-
得到本地时间元组
-
元组是不是绝对不可变呢?
-
先总结去
- 这次我们深入了解了元组
- 元组不可变指的是
- 为元组对象分配了空间后
- 元组对象就不再改变
- 元组变量指的是
- 引用元组常量的变量名
- 元组不可变指的是
- python中有三种不可变(immutable)的对象类型
- 数字
- 字符串
- 元组
- 元组是不是绝对不可变呢?🤔
- 下次再说 👋