当将Python引用重新分配给自身时,它是取消分配并重新分配,还是什么都不做?

2024-06-11 00:20:28 发布

您现在位置:Python中文网/ 问答频道 /正文

def new_val(x):
    x['a'] = 5
    return x

b = {'a': 2}
b = new_val(b) # b re-assigned to ret val

因为字典是可变的,所以b是指向字典的引用指针,我们将这个指针传递给函数new\u val

对字典的引用没有改变,但是字典对2的引用变为5。你知道吗

原来的变量b现在应该有“a”映射到5。但是,我想知道对字典的引用(换句话说,变量b的指针)是否曾经改变过。你知道吗

从技术上讲,我们将引用变量b“重新分配”给恰好相同的引用。你知道吗

在低水平上,会发生什么?这像是一个no-op,其中一些逻辑识别出引用是相同的,还是引用实际上得到了取消分配和重新分配?你知道吗

也许更简单的例子是:

b = {}
b = b # At a low level, what does this line do?

Tags: to函数norenewreturn字典def
1条回答
网友
1楼 · 发布于 2024-06-11 00:20:28

b = b不是禁止操作。前一个b变量保存的数据被重新分配给一个新变量,这个新变量的名称也是b。所以它只会被忽略。你知道吗

别相信我的话。让我们来分解最后一个示例:

def f():
    b = {}
    b = b

import dis

print(dis.dis(f))

  2           0 BUILD_MAP                0
              3 STORE_FAST               0 (b)

  3           6 LOAD_FAST                0 (b)
              9 STORE_FAST               0 (b)
             12 LOAD_CONST               0 (None)
             15 RETURN_VALUE

如您所见,对于b = b行,在b上有2个操作LOAD_FASTSTORE_FAST。他们一事无成,却被处决了。你知道吗

相关问题 更多 >