Python list.append后来更改元素

时间:2017-10-28 10:55:10

标签: python python-3.x list

对于args= ['', '0', 'P1', 'with', '10']students=[['1', '2', '3', 6]],它会打印:

[[['1', '2', '3', 6]]]
[[['10', '2', '3', 6]]]

预期产出为:

[[['1', '2', '3', 6]]]
[[['1', '2', '3', 6]]]

但它以某种方式改变了backup_list任何快速解决方案?

backup_list.append(students[:])
print(backup_list)
students[int(args[1])][0] = args[4]
print(backup_list)

1 个答案:

答案 0 :(得分:1)

[:]制作一份浅色副本。你需要一份深刻的副本:

import copy

backup_list.append(copy.deepcopy(students))

完整计划:

import  copy

backup_list = []
args= ['', '0', 'P1', 'with', '10']
students=[['1', '2', '3', 6]]
backup_list.append(copy.deepcopy(students))
print(backup_list)
students[int(args[1])][0] = args[4]    
print(backup_list)

输出:

[[['1', '2', '3', 6]]]
[[['1', '2', '3', 6]]]

documentation解释了浅拷贝和深拷贝之间的区别:

  

浅拷贝构造一个新的复合对象然后   (尽可能)将引用插入到找到的对象中   原来。

     

深层复制构造一个新的复合对象,然后递归地插入   将原件中找到的物品复制到其中。