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]
。你没有两个数组,你有一个列表和两个名称。