【问题标题】:Does swapping the value within the list exchange reference in Python3?在 Python3 中交换列表交换引用中的值吗?
【发布时间】:2019-02-14 09:42:39
【问题描述】:

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

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)

【问题讨论】:

    标签: python-3.x list swap


    【解决方案1】:

    在 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] 共享同一个地址,因为值相同。

    所以所有指向相同值的变量都将具有相同的内存地址。在更改变量值时,变量被适当地映射到新值的地址

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

    【讨论】:

    • 但我认为这只是1 本身的数字的idhex(id(1))hex(id(a[0])) 返回相同的值。
    • 更新了答案。
    猜你喜欢
    • 2015-04-09
    • 1970-01-01
    • 2014-03-16
    • 2010-09-07
    • 2019-06-22
    • 1970-01-01
    • 2012-11-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多