Python 为什么两个数组共享值?

Python 为什么两个数组共享值?,python,list,swap,Python,List,Swap,我有一个数组array1=[[0,1,2,3],[4,5,6,7],我想切换array1[0]和array1[1],理想情况下是这样的:array1=[4,5,6,7],[0,1,2,3]。到目前为止,我已经尝试过: array1=[[0,1,2,3],[4,5,6,7]] 阵列2=阵列1 阵列1[0]=阵列2[1] 阵列1[1]=阵列2[0] 但是它返回[[4,5,6,7],[4,5,6,7]]。有人知道为什么会这样吗?当你说: array2 = array1 您正在使array2引用内存

我有一个数组
array1=[[0,1,2,3],[4,5,6,7]
,我想切换
array1[0]
array1[1]
,理想情况下是这样的:
array1=[4,5,6,7],[0,1,2,3]
。到目前为止,我已经尝试过:

array1=[[0,1,2,3],[4,5,6,7]]
阵列2=阵列1
阵列1[0]=阵列2[1]
阵列1[1]=阵列2[0]
但是它返回
[[4,5,6,7],[4,5,6,7]]
。有人知道为什么会这样吗?

当你说:

array2 = array1
您正在使
array2
引用内存中与
array1
相同的对象。这称为“绑定”赋值。在那之后,表达:

array1[0] = array2[1]
这无异于说:

array1[0] = array1[1]
array1和array2之间不再有任何区别。

当您说:

array2 = array1
您正在使
array2
引用内存中与
array1
相同的对象。这称为“绑定”赋值。在那之后,表达:

array1[0] = array2[1]
这无异于说:

array1[0] = array1[1]
array1和array2之间不再有任何区别。

您可以尝试:

array1 = [array1[1], array1[0]]
那么您就不需要
阵列2

您可以尝试:

array1 = [array1[1], array1[0]]

那么您不需要
array2

您想要复制一个数组,但是:

array2 = array1
这不是复制。您刚刚创建了一个新标签
array2
,并将其指向
array1


要复制数组,您可以在
copy.copy()
copy.deepcopy()
处创建一个循环,此处:

您想要复制数组,但是:

array2 = array1
这不是复制。您刚刚创建了一个新标签
array2
,并将其指向
array1


要复制数组,您可以在
copy.copy()
copy.deepcopy()
中创建一个循环,这里:

array2=array1
只意味着两个名称现在引用相同的列表。换句话说,名称不是内存位置,它们只是附加到对象上的标签。用这个来看看会发生什么:你可以只使用
array1[0],array1[1]=array1[1],array1[0]
。你没有两个数组,一个列表有两个名称。
array2=array1
只意味着两个名称现在引用同一个列表。换句话说,名称不是内存位置,它们只是附加到对象上的标签。用这个来看看会发生什么:你可以只使用
array1[0],array1[1]=array1[1],array1[0]
。你没有两个数组,你有一个列表和两个名称。