对于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)
最佳答案
[:]
进行浅表复制。您需要一个深层副本:
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解释了浅拷贝和深拷贝之间的区别:
浅表副本构造一个新的复合对象,然后
(尽可能)将引用插入其中
原本的。
深层副本构造一个新的复合对象,然后递归插入
将原始文档中找到的对象复制到其中。
关于python - Python list.append之后添加更改的元素,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46988924/