nums 数组是否对字母进行深层复制[2:5] = ['C', 'D', 'E']

问题描述 投票:0回答:1

这里是Python新手,学习浅层v.s.在 Python 中深度复制列表。我了解到有两种方法可以创建原始值不变且仅修改新值的副本,反之亦然。它们是浅复制和深复制。.

除了 Copy.copy() 和 Copy.deepcopy() 之外,我还了解到切片运算符可用于浅复制和深复制列表。从 Python 官方文档,我能够找到信息,执行

correct_rgba = rgba[:]
, Correct_rgba 会生成 rgba 的浅表副本。

ex1.

rgba = ["Red", "Green", "Blue", "Alph"]
correct_rgba = rgba[:]
correct_rgba[-1] = "Alpha"
correct_rgba  # ["Red", "Green", "Blue", "Alpha"]
rgba  # ["Red", "Green", "Blue", "Alph"]

但是,我找不到信息来确认

Assignment to Slices
是否是深拷贝。这是在同一个 Python 文档中找到的示例。

ex2.

letters = ['a', 'b', 'c', 'd', 'e', 'f', 'g']
letters[2:5] = ['C', 'D', 'E']
letters  # ['a', 'b', 'C', 'D', 'E', 'f', 'g']
letters[:] = []  
letters  # [] 

我的问题:

(1) letter[2:5] 是否深层复制 ['C', 'D', 'E']?字母[:]是否深复制[]?

(2) 如何测试列表是浅拷贝还是深拷贝?

谢谢你

python python-3.x
1个回答
0
投票

我不知道确切的答案,但重要的问题确实是#2:“如何测试以确定列表是浅拷贝还是深拷贝?”

is
关键字测试同一性(不同于相等性)。如果变量
a is b
True
引用同一对象,则表达式
a
的计算结果为
b
。要查明列表
l2
是列表
l1
的深副本还是浅副本,请在元素之间进行
is
比较。

l1 = [MyObject()]
l2 = l1[:]
print(l1[0] is l2[0])

我会警告您不要在列表中使用原始数据类型,因为它们会受到不可预测的优化。例如,我上次检查过,0 到 255 之间的两个整数变量始终具有相同的标识。我不知道字符串的行为是否相似。

© www.soinside.com 2019 - 2024. All rights reserved.