d = {'a': 1, 'b': 2, 'c': 3}
t = (1, 2, d)
t[2]['b'] = 555
t #вызов кортежа, в итоге изменения будут видны
我有点困惑,元组是不可变类型,字典是可变的。但是如何在不可变类型中显示更改,以及为什么元组完全支持可变类型,如果它的特性是不可变的。
d = {'a': 1, 'b': 2, 'c': 3}
t = (1, 2, d)
t[2]['b'] = 555
t #вызов кортежа, в итоге изменения будут видны
我有点困惑,元组是不可变类型,字典是可变的。但是如何在不可变类型中显示更改,以及为什么元组完全支持可变类型,如果它的特性是不可变的。
了解元组不包含字典本身,而只是对它的引用,会有所帮助。那些。写入字典时,可以更改字典本身,但不能用元组中的另一个字典替换它。
b您正在通过此处链接中的键访问字典的成员之一只有由对象引用组成的元组本身的内容是不可变的
实验:
有一个元组
t:问它的 ID 和其中一个成员的 ID 是什么:
以及字典成员之一的标识符
b更改此值并查看标识符的更改:
即现在有一个具有新 id 的新对象。或者换句话说,内存中有一个引用指向的新对象,该对象存储在 key 下的字典中
b。先前对 key 下的对象的引用b,即整数 2,被对整数 555 的引用替换。并且内存中具有整数 2 的对象本身被销毁,因为没有对它的单个有效引用.问题:元组和成员 [2] 元组对象是否发生了变化?
当然不是!!
还有一个重要的注意事项:
一个元组没有办法阻止它的元素值被改变,它们是独立的对象,可以通过元组外部的引用来访问。元组中的字典和其他可变对象可以更改,但它们的标识符将始终相同。