关于python:设置两个数组相等

Setting two arrays equal

本问题已经有最佳答案,请猛点这里访问。
1
2
3
4
array1=[0,1,2]
array2=array1
array2[0]=234234
print array1

输出:

1
[234234, 1, 2]

为什么python会更改"array1"?它不应该只是改变阵列2吗?当我更改array2时,如何防止python更改array1?


array1array2是同一对象。这就是为什么改变其中一个会改变另一个。如果要复制对象,可以使用以下方法:

1
array2 = array1[:]

在此查看更多信息。


使用切片表示法像这样复制

1
array2 = array1[:]

或者可以使用list函数

1
array2 = list(array1)

当您将一个列表分配给另一个列表时,将不会创建一个新列表,但两个变量都将被设置为引用同一个列表。这可以用这个程序确认。

1
2
3
array1 = [1, 2, 3, 4]
array2 = array1
print id(array1), id(array2)

它们都将打印相同的ID。这意味着它们都是相同的(如果您来自C背景,您可以将它们视为指针(在cpython实现中,它们实际上是指针,其他实现选择打印唯一的ID-请检查Kojiro的评论)。在这里阅读更多关于id的信息。当你这样做的时候

1
2
3
array3 = array1[:]
array4 = list(array1)
print id(array1), id(array3), id(array4)

您将获得不同的ID,因为在这些情况下将创建新的列表。


array1array2是同一个列表的两个名称,因为这就是您设置它们的方式。如果不希望这样做,请使用以下方法之一复制列表:

1
2
array2 = array1[:]
array2 = list(array1)