Python的Dict的内嵌Dict对象赋值给其他变量时当做引用处理,并不是一个副本。所以,后续改变引用变量的值的同时也改变了Dict对象本身的值,代码运行结果如下。
#python ref demo
dict = {
'k1':'v1',
'k2':'v2'
}
dict['a']= 'A'
a = dict['a']
print(a)
a = 'B'
print(a,dict['a'])
dict['d'] = {'k3':'v3'}
print(dict)
d = dict['d']
print(d)
d['d1']='D'
print(dict,dict['d'] is d)
dd = d
dd['d2'] = 'DD'
print(dict,dict['d'] is dd)
d['d3']='double'
print(dict,dd,d is dd)
dict['dd']=dd
dd['d4'] = 'twins'
dict['dd']['new-one']={'new':'one'}
print(dd,d,d is dd)
print(dict)
indentVal = dd.copy()
indentVal['Key'] = 'Value'
print(indentVal, indentVal is dict['dd'])
print(dict)
运行结果
A
B A
{'k1': 'v1', 'k2': 'v2', 'a': 'A', 'd': {'k3': 'v3'}}
{'k3': 'v3'}
{'k1': 'v1', 'k2': 'v2', 'a': 'A', 'd': {'k3': 'v3', 'd1': 'D'}} True
{'k1': 'v1', 'k2': 'v2', 'a': 'A', 'd': {'k3': 'v3', 'd1': 'D', 'd2': 'DD'}} True
{'k1': 'v1', 'k2': 'v2', 'a': 'A', 'd': {'k3': 'v3', 'd1': 'D', 'd2': 'DD', 'd3': 'double'}} {'k3': 'v3', 'd1': 'D', 'd2': 'DD', 'd3': 'double'} True
{'k3': 'v3', 'd1': 'D', 'd2': 'DD', 'd3': 'double', 'd4': 'twins', 'new-one': {'new': 'one'}} {'k3': 'v3', 'd1': 'D', 'd2': 'DD', 'd3': 'double', 'd4': 'twins', 'new-one': {'new': 'one'}} True
{'k1': 'v1', 'k2': 'v2', 'a': 'A', 'd': {'k3': 'v3', 'd1': 'D', 'd2': 'DD', 'd3': 'double', 'd4': 'twins', 'new-one': {'new': 'one'}}, 'dd': {'k3': 'v3', 'd1': 'D', 'd2': 'DD', 'd3': 'double', 'd4': 'twins', 'new-one': {'new': 'one'}}}
{'k3': 'v3', 'd1': 'D', 'd2': 'DD', 'd3': 'double', 'd4': 'twins', 'new-one': {'new': 'one'}, 'Key': 'Value'} False
{'k1': 'v1', 'k2': 'v2', 'a': 'A', 'd': {'k3': 'v3', 'd1': 'D', 'd2': 'DD', 'd3': 'double', 'd4': 'twins', 'new-one': {'new': 'one'}}, 'dd': {'k3': 'v3', 'd1': 'D', 'd2': 'DD', 'd3': 'double', 'd4': 'twins', 'new-one': {'new': 'one'}}}``