在列表中交换值是否交换Python3中的引用?

时间:2019-02-14 09:42:40

标签: python-3.x list swap

我想知道是否交换如下所示的列表项中的值只是交换值或参考地址。

  

a = [1,2]

a[0], a[1] = a[1], a[0]

print(a) # [2, 1]

在Python3机制的背景下,我想知道下面的哪个与上面的代码等效。

情况1:插入值本身

a[0], a[1] = 2, 1

案例2:交换该项目的引用(因此仅更改引用而不更改值本身)

a[0], a[1] = (address of 2nd element), (address of 1st element)

1 个答案:

答案 0 :(得分:0)

在Python中,内存是为而不是变量分配的。您可以通过下面的方法对此进行验证。

>>> a = 1
>>> b = 1
>>> hex(id(a))
'0x102ecdbf0'
>>> hex(id(b))
'0x102ecdbf0'
>>> x = [0,1]
>>> hex(id(x[0]))
'0x102ecdbd0'
>>> hex(id(x[1]))
'0x102ecdbf0'
>>> x[0],x[1] = x[1],x[0]
>>> hex(id(x[0]))
'0x102ecdbf0'
>>> hex(id(x[1]))
'0x102ecdbd0'

这里,a,b,x [1]共享相同的地址,因为值相同。

因此,所有指向相同值的变量将具有相同的内存地址。更改变量值后,变量将被适当地映射到新值的地址

对于您的情况,可以将其视为参考交换