列表被替换

时间:2014-08-06 16:14:24

标签: python list python-3.x replication

我有以下代码

>>> no=[]
>>> matrix = [[[] for x in xrange(4)] for x in xrange(4)] 
>>> no=[2]
>>> temp = no
>>> matrix[1][2].append(temp)
>>> no.append(3)
>>> matrix[1][2]

当我打印matrix[1][2]时,我得到以下输出:

[[2, 3]]

但我想要的是:

[2]

所以基本上发生的事情是,如果我之后更改它,列表将在矩阵列表中进行更改。但我不想让它改变

我该怎么办?为什么会这样?

1 个答案:

答案 0 :(得分:3)

复制无temp = no[:]

temp = no只是对同一对象的引用,因此no中的任何更改都会影响temp

参考:

In [21]: my_l = [1,2,3]

In [22]: ref_my_l = my_l

In [23]: ref_my_l
Out[23]: [1, 2, 3]

In [24]: my_l.append(4)

In [25]: my_l
Out[25]: [1, 2, 3, 4]

In [26]: ref_my_l
Out[26]: [1, 2, 3, 4]

副本:

In [27]: my_l = [1,2,3]

In [28]: copy_my_l = my_l[:]

In [29]: my_l.append(4)

In [30]: my_l
Out[30]: [1, 2, 3, 4]

In [31]: copy_my_l
Out[31]: [1, 2, 3]