append之后添加更改的元素

append之后添加更改的元素

对于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/

10-10 05:14