array1=[0,1,2]
array2=array1
array2[0]=234234
print array1
Run Code Online (Sandbox Code Playgroud)
OUTPUT:
[234234, 1, 2]
Run Code Online (Sandbox Code Playgroud)
为什么python会改变'array1'?它不应该只改变array2吗?当我更改array2时,如何防止python更改array1?
Tim*_*ers 12
array1并且array2是同一个对象.这就是为什么改变要么改变另一个.如果要复制对象,可以使用以下方法:
array2 = array1[:]
Run Code Online (Sandbox Code Playgroud)
使用切片符号像这样复制
array2 = array1[:]
Run Code Online (Sandbox Code Playgroud)
或者你可以使用list函数
array2 = list(array1)
Run Code Online (Sandbox Code Playgroud)
当您将一个列表分配给另一个列表时,不会创建新列表,但两个变量都会引用同一个列表。这可以通过该程序来确认。
array1 = [1, 2, 3, 4]
array2 = array1
print id(array1), id(array2)
Run Code Online (Sandbox Code Playgroud)
他们都会打印相同的 id。这意味着它们都是相同的(如果您来自 C 背景,您可以将它们视为指针(在 CPython 实现中它们实际上是指针,其他实现选择打印唯一的 id - 请检查 kojiro 的评论))。阅读更多有关id 此处的信息。当你这样做时
array3 = array1[:]
array4 = list(array1)
print id(array1), id(array3), id(array4)
Run Code Online (Sandbox Code Playgroud)
您将获得不同的 ID,因为在这些情况下将创建新列表。