【水蓝石】 python只把列表里面的值复制到另一个列表中

2020-11-23   492 次阅读


概述

写东西的时候突然想重复利用列表中的值
但是因为列表用等于号来赋值后,被赋值的列表会因为原列表改变而改变

在晚上看到一种方法是用切片的方法List[:],可以只取其值。一瞬间跟发现了真理似的

但是实际使用中却发现,被赋值的列表还是会因为原列表的改变而改变

最后看到了这样一个东西,解决了我的问题,让我感觉以后用这个就行

copy.copy,deepcopy和切片对原来的列表和新列表关联的影响

import copy
a = [1,2,3,4,['1','2']]
b = a
c = a[:]
d = copy.copy(a)
e = copy.deepcopy(a)

# 对a进行改变,观察各种赋值a方法对a,b的关联性区别

a.append(5)
a[4].append('c')

# 结果是

b = [1,2,3,4,['1','2','c'],5]
c = [1,2,3,4,['1','2','c']] # [:]可以抵抗表层append
d = [1,2,3,4,['1','2','c']] # copy.copy可以抵抗表层append
e = [1,2,3,4,['1','2']] # copy.deepcopy一点也不会变

#另外

e.append(2)
e
result:

[1, 2, 3, 4, ['1', '2'], 2]  # 还可以继续改变,就等于两个东西了

所以直接用copy.deepcopy就可以做到想做的一切了

而且copy.deepcopy还可以继续改变,就是之前说的完全两个不同的东西了

Q.E.D.

知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议

无论在未来前做什么,未来都会普通的到来