插入独立引用变量的Python列表

插入独立引用变量的Python列表,python,python-3.x,list,Python,Python 3.x,List,假设a是一个参考变量,我想把它放入一个列表中三次: a = [1,2,3] b = [a]*3 >>> b [[1, 2, 3], [1, 2, 3], [1, 2, 3]] 所以这仍然像预期的那样有效。但如果我将一个元素附加到其中一个引用变量,它将反映到所有引用变量: >>> b[0].append(4) >>> b [[1, 2, 3, 4], [1, 2, 3, 4], [1, 2, 3, 4]] 发生这种情况是因为第一个代码块中的

假设
a
是一个参考变量,我想把它放入一个列表中三次:

a = [1,2,3]
b = [a]*3
>>> b
[[1, 2, 3], [1, 2, 3], [1, 2, 3]]
所以这仍然像预期的那样有效。但如果我将一个元素附加到其中一个引用变量,它将反映到所有引用变量:

>>> b[0].append(4)
>>> b
[[1, 2, 3, 4], [1, 2, 3, 4], [1, 2, 3, 4]]
发生这种情况是因为第一个代码块中的
*
运算符仅复制引用,并且列表仅指向
a
?我是否需要一个for循环,以便能够有一个独立参考变量(副本)
n次的列表?(在上述示例中,n为3)

在这种情况下,
*
操作符具体是如何工作的

对于for循环和
append()
-方法,行为是相同的-这里也使用引用吗

>>> a = [1,2,3]
>>> b = []
>>> for i in range(2):
...     b.append(a)
...
>>> b
[[1, 2, 3], [1, 2, 3]]
>>> b[0].append(4)
>>> b
[[1, 2, 3, 4], [1, 2, 3, 4]]
插入副本时,行为符合预期:

>>> a = [1,2,3]
>>> b = []
>>> for i in range(2):
...     b.append(a.copy())
...
>>> b
[[1, 2, 3], [1, 2, 3]]
>>> b[0].append(4)
>>> b
[[1, 2, 3, 4], [1, 2, 3]]
有没有一种比我在上面使用
.append()
.copy()
循环更短、更方便的方法

我的Python版本是Python 3.8.6
请注意,我的问题不仅仅是使用
deep\u copy()
,因为它是关于在列表中更频繁地插入元素和
*
-运算符-我知道
deep\u copy()
是什么

看看这些复制品,现在已经有10多个了。(我的)首选方法是执行
q=[a[:]for uuu in range(3)]
(浅拷贝,不适用于列表列表)或
q=[a.copy()for uu in range(3)]
(使用
deepcopy()
用于列表列表列表)。问题是所有“引用类型-集合、dict等行为相同-您的列表包含引用3次,所有引用指向相同的数据,如果您通过任何引用添加到数据中,所有引用仍然指向相同的更改数据。@PatrickArtner最喜欢的一个是实际使用<代码>列表(a)
不管输入参数的类型如何,它都会工作列表上的
*
会触发插入引用的
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
使用
复制模块
或使用
列表(您的其他列表)
-如果您有嵌套的数据结构也是基于引用的,请注意何时进行深度复制。