python 字典和list深浅拷贝问题

1、问题:

先看两个例子:

例1:

d={"name":""}
l=[]
for i in range(5):
    d["name"]=i
    l.append(d)
print (l)

运行后结果为:

[{'name': 4}, {'name': 4}, {'name': 4}, {'name': 4}, {'name': 4}]

例2:

d = {}
l = {}
for i in range(5):
    d['name'] = i
    l[str(i)]= d
print (l)

运行后结果为:

{'0': {'name': 4}, '1': {'name': 4}, '2': {'name': 4}, '3': {'name': 4}, '4': {'name': 4}}

2、原因:

发现与想要的数据不符,出现这种情况是python为了效率,几个变量指向同一块内存,改变一个值其他都改变,是浅拷贝造成的。

3、解决方法:

使用深拷贝, object = copy.deepcopy(object )

对于例1:

import copy
d={"name":""}
l=[]
for i in range(5):
    d["name"]=i
    l.append(d)
    l = copy.deepcopy(l)
print (l)

对于例2:

import copy
d = {}
l = {}
for i in range(5):
    d['name'] = i
    l[str(i)]= d
    l = copy.deepcopy(l)
print (l)

猜你喜欢

转载自blog.csdn.net/hajungong007/article/details/80342492