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

输出:

[234234, 1, 2]

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

4

3 回答 3

13

array1并且array2同一个对象。这就是为什么改变其中一个会改变另一个。如果你想复制对象,这里有一种方法:

array2 = array1[:]

在这里查看更多信息。

于 2013-10-13T02:58:33.513 回答
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 这里。当你这样做

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

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

于 2013-10-13T02:57:04.853 回答
3

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

array2 = array1[:] 
array2 = list(array1)
于 2013-10-13T02:57:35.120 回答