我想知道如果交换下面的列表项中的值只是交换值或参考地址。
a = [1,2]
a[0], a[1] = a[1], a[0]
print(a) # [2, 1]
在Python3机制的引擎下,我想知道下面的哪一个等同于上面的代码。
案例1:插入值本身
a[0], a[1] = 2, 1
Case2:交换该项的引用(因此只更改引用但不更改值本身)
a[0], a[1] = (address of 2nd element), (address of 1st element)
在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]共享相同的地址,因为值相同。
因此,指向相同值的所有变量将具有相同的内存地址。在更改变量值时,变量将适当地映射到新值的地址。
对于您的情况,可以将其视为参考交换。