错误代码:

import copy
lists={}
test=['s1','s2','s3']
data = {'value': '',}
for i in range(2):
    lists[i] = data

for j in range(2):
    lists[j]['value']=test[j]

print(lists)

结果:

Connected to pydev debugger (build 182.5107.22)
{0: {'value': 's2'}, 1: {'value': 's2'}}

 

改正后代码

import copy
lists={}
test=['s1','s2','s3']
data = {'value': '',}
for i in range(2):
    lists[i] = copy.deepcopy(data)

for j in range(2):
    lists[j]['value']=test[j]

print(lists)

结果:

Connected to pydev debugger (build 182.5107.22)
{0: {'value': 's1'}, 1: {'value': 's2'}}

 

原因:

lists[i] = data 在执行 赋值时, 每一次调用的都是 data变量的源地址,并没有改变地址。
所以我们在下面动态的改变值的时候,就会出现改变一个值,所有结果全部改变。
类似于python的浅拷贝和深拷贝。 所以只需要将其变为深拷贝即可。copy.deepcopy().

 

补充:

# 这个是嵌套列表 也会出现相同问题 
import
copy lists=[] test=['s1','s2','s3'] data = [1] for i in range(2): lists.append(data) lists[0].append('1') print(lists)

结果:

[[1, '1'], [1, '1']]

改正:

import copy
lists=[]
test=['s1','s2','s3']
data = [1]
for i in range(2):
    lists.append(copy.deepcopy(data))

lists[0].append('1')
print(lists)

结果:

[[1, '1'], [1]]

原因同上

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2022-01-14
  • 2021-11-29
  • 2021-11-09
  • 2021-07-22
  • 2022-01-01
  • 2021-06-10
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2021-08-14
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案