|
发表于 2020-11-17 09:49:09
|
显示全部楼层
===为什么会得到5?而不始6
字典键值如果是数字,它就是一个float型,而且精度不好说,请看实例:
>>> a={1:'one',1.0:'two',1.00000000000000000000001:'three'}
>>> a
{1: 'three'} #很神奇吧,它只剩1对了。。。
--------------------------------分割线---------------------------------------------------
====为什么会得到10
dict.copy()返回的是一个浅复制,何谓浅复制,请看实例:
>>> dict1 = {1:'root',2:[1,2,3]}
>>> dict2 = dict1
>>> dict3 = dict1.copy()
>>> dict1[1] = 'fuck'
>>> dict1
{1: 'fuck', 2: [1, 2, 3]}
>>> dict2
{1: 'fuck', 2: [1, 2, 3]}
>>> dict3
{1: 'root', 2: [1, 2, 3]} #到这里可以看出来,dict.copy()浅复制,必然复制了父对象
>>> dict1[2].reverse()
>>> dict1
{1: 'fuck', 2: [3, 2, 1]}
>>> dict2
{1: 'fuck', 2: [3, 2, 1]}
>>> dict3
{1: 'root', 2: [3, 2, 1]} #到这里可以看出来,dict.copy()浅复制,对子对象仅仅是引用
也就是说dict1 = {1:'root',2:[1,2,3]},dict1.copy(),拷贝了1:'root',以及2,对子对象[1,2,3]则为引用,而不是直接拷贝。看例子:
>>> dict1={1:'123',2:[456]}
>>> dict2=dict1.copy()
>>> dict1[1]='111'
>>> dict1[2].reverse()
>>> id(dict1[1])
64516896
>>> id(dict2[1])
64516640
>>> id(dict1[2])
64452648
>>> id(dict2[2])
64452648
--------------------------------分割线-----------------------------------------
深拷贝就是完全拷贝了,这里就不啰嗦了,可以用第2个方法,自己写个例子用id()查看变量的内存地址 |
|