针对dict中 嵌套dict 出现复制异常
lists={}
test=['s1','s2','s3']
data = {'value': '',}
for i in range(2):
lists[i]=data
# dic = {0: {'value': '',}, 1:{'value': '',}}
for j in range(2):
# print(j)
lists[j]['value']=test[j]
print(lists)
结果
{0: {'value': 's2'}, 1: {'value': 's2'}}
很奇怪0,1的value都是s2
解决方法:
lists={}
test=['s1','s2','s3']
data = {'value': '',}
for i in range(2):
lists[i]={'value': '',}
# dic = {0: {'value': '',}, 1:{'value': '',}}
for j in range(2):
# print(j)
lists[j]['value']=test[j]
print(lists)
或
lists = {0: {'value': '',}, 1:{'value': '',}}
for j in range(2):
# print(j)
lists[j]['value']=test[j]
print(lists)
二者的结果均一致
{0: {'value': 's1'}, 1: {'value': 's2'}}
猜测原因:可能是因为data是一个地址 ,lists[i]=某个地址,当给list[i]赋值时相当于给某个地址赋值,故其中一个值变了,其余值也跟着变。 lists[i]={'Url': '',} 相当于给了个新地址 。可能原因不对欢迎指出。
博客探讨了Python中字典复制的微妙之处,通过一个示例展示了如何因引用导致的复制异常。当直接将字典赋值给列表时,所有列表元素实际上指向同一对象,修改一个元素会影响所有元素。解决方法是使用深拷贝或直接为列表创建新的字典实例,以确保每个元素独立。此问题对于理解和避免Python编程中的常见错误至关重要。

2345


被折叠的 条评论
为什么被折叠?



