简单的Python问题:
示例列表: A = [1,2,3,4,5]
我需要生成另一个列表B ,它是列表A的浅表副本,这样B就是一个包含相同顺序的相同元素的新列表(这样我就可以替换B的元素之一而不影响A).我怎样才能做到这一点?
澄清:我想做点什么
def some_func(A)
B = {what do I do here to get a copy of A's elements?}
B[0] = some_other_func(B[0])
yet_another_func(B)
Run Code Online (Sandbox Code Playgroud)
根据您的所有答案+ Python文档,更好的方法来做我想要的是以下内容:
def some_func(A)
B = [some_other_func(A[0])] + A[1:]
yet_another_func(B)
Run Code Online (Sandbox Code Playgroud)
谢谢你指点我正确的方向!
这将是一个深刻的副本,而不是浅薄的副本.
列表默认情况下复制浅.这就是复制模块中有deepcopy命令的原因.
B = copy.deepcopy(A)
可选地,B = A[:]将会这样做.但是为了将来要记住深度复印.更复杂的数据类型可以从中受益.
添加有关副本的信息:
浅拷贝:
b = [1,2]
a = b
b[0] = 11
print a // [1,11]
Run Code Online (Sandbox Code Playgroud)
深刻的副本:
b = [1,2]
a = b[:]
b[0] = 11
print a // [1,2]
Run Code Online (Sandbox Code Playgroud)
但是,此外:
>>> a = [[1,2]]
>>> b = a[:]
>>> b
[[1, 2]]
>>> a
[[1, 2]]
>>> a[0][0] = 11
>>> a
[[11, 2]]
>>> b
[[11, 2]]
>>>
Run Code Online (Sandbox Code Playgroud)
因此,在这种情况下,元素本身就是浅层副本.
以下是制作列表A副本的3种方法:
使用切片表示法:
copy_of_A = A[:]
Run Code Online (Sandbox Code Playgroud)
使用列表构造函数:
copy_of_A = list(A)
Run Code Online (Sandbox Code Playgroud)
使用复制模块:
from copy import copy
copy_of_A = copy(A)
Run Code Online (Sandbox Code Playgroud)
正如您所要求的,这些副本都是浅色副本.要了解浅拷贝和深拷贝之间的区别,请阅读拷贝模块的文档.
| 归档时间: |
|
| 查看次数: |
232 次 |
| 最近记录: |