第一个,字典的问题:
dict1= {1:['a','b'],2:['c','d']}
dict2=dict1.copy()
在这里如果我
dict1[1][0] = 'nihao'
那么
dict1和dict2都会变成 {1:['nihao','b'],2:['c','d']}
>>> d1 = {1:['a', 'b'], 2:['c', 'd']}
>>> d2 = d1.copy()
>>> id(d1[1])
2650545373248
>>> id(d2[1])
2650545373248
>>> id(d1[1][0])
2650536230512
>>> id(d2[1][0])
2650536230512
>>> d1[1][0] = 'nihao'
>>> print(d1)
{1: ['nihao', 'b'], 2: ['c', 'd']}
>>> print(d2)
{1: ['nihao', 'b'], 2: ['c', 'd']}
>>> id(d1[1][0])
2650545611824
>>> id(d2[1][0])
2650545611824
list和dict都是可变数据类型,而且位置可索引,所以修改值不会引起地址指向的改变。
但是如果我
dict1[1] = {'nihao','b'}
那么只有 dict1 key 1的值会变 dict2的值不会变
>>> d1[1] = {'nihao', 'b'}
>>> id(d1[1])
2650545262368
>>> id(d2[1])
2650545373248
>>> id(d1)
2650545030848
>>> id(d2)
2650545139328
>>>
后来,你将dict1 key 1 的值修改为一个集合类型的数据,由于数据类型的改变,内存就必须要开辟一块新的储存空间来存放新的集合数据。
可以发现,两个字典指向的地址已经不一样了。赋值给新类型数据的前后,dict1 key 1 的位置也不一样了。而dict1 key 1的地址却没有改变。
既然这时候两个字典已经被分配了不同的地址,再去做其他操作的时候,就不会相互影响了。所以也就有下面的:
而且如果我dict1.popitem() dict2的也不会变 那么为什么只有当 dict1[1][0]这种情况下 dict2的value也会跟着改变呢?
新手上路:如有不妥,请指正,轻喷!
|