设置两个数组相等

时间:2013-10-13 02:54:34

标签: python arrays

array1=[0,1,2]
array2=array1
array2[0]=234234
print array1

输出:

[234234, 1, 2]

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

3 个答案:

答案 0 :(得分:11)

array1array2 是同一个对象。这就是为什么改变要么改变另一个。如果你想复制对象,这是一种方法:

array2 = array1[:]

请参阅more on this here

答案 1 :(得分:4)

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

array2 = array1[:]

或者您可以使用list功能

array2 = list(array1)

当您将一个列表分配给另一个列表时,将不会创建新列表,但会使这两个变量引用相同的列表。这可以通过该程序确认。

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

他们都会打印相同的ID。这意味着它们都是相同的(如果您来自C背景,您可以将它们视为指针(在CPython实现中它们确实是指针,其他实现选择打印唯一ID - 请检查kojiro的注释))。详细了解id here。当你这样做

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

你会得到不同的ID,因为在这些情况下会创建新的列表。

答案 2 :(得分:2)

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

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