def new_val(x): x['a'] = 5 return xb = {'a': 2}b = new_val(b) # b re-assigned to ret val由于字典是可变的,b 是一个指向字典的引用指针,我们将这个指针传递给函数 new_val。对字典的引用没有改变,但是字典对 2 的引用变成了 5。原始变量 b 现在应该有 'a' 映射到 5。但是,我想知道对字典的引用(换句话说,变量 b 的指针)是否会改变。从技术上讲,我们将引用变量 b 重新分配给恰好相同的引用。在低水平上,会发生什么?这是否像一个无操作,其中一些逻辑识别出引用是相同的,或者引用实际上被取消分配并重新分配?也许一个更简单的例子是:b = {}b = b # At a low level, what does this line do?
1 回答
largeQ
TA贡献2039条经验 获得超7个赞
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
正如你看到有2个操作LOAD_FAST并STORE_FAST在b该b = b行。他们没有取得任何有用的成果,但他们被执行了。
添加回答
举报
0/150
提交
取消