慕田峪9158850
2021-12-17 10:31:08
def new_val(x): x['a'] = 5 return xb = {'a': 2}b = new_val(b) # b re-assigned to ret val由于字典是可變的,b 是一個(gè)指向字典的引用指針,我們將這個(gè)指針傳遞給函數(shù) new_val。對字典的引用沒有改變,但是字典對 2 的引用變成了 5。原始變量 b 現(xiàn)在應(yīng)該有 'a' 映射到 5。但是,我想知道對字典的引用(換句話說,變量 b 的指針)是否會改變。從技術(shù)上講,我們將引用變量 b 重新分配給恰好相同的引用。在低水平上,會發(fā)生什么?這是否像一個(gè)無操作,其中一些邏輯識別出引用是相同的,或者引用實(shí)際上被取消分配并重新分配?也許一個(gè)更簡單的例子是:b = {}b = b # At a low level, what does this line do?
1 回答

largeQ
TA貢獻(xiàn)2039條經(jīng)驗(yàn) 獲得超8個(gè)贊
b = b是不是無操作。先前b變量持有的數(shù)據(jù)被重新分配給一個(gè)新變量,其名稱也是b。所以它什么都不做,但不會被忽略。
不要相信我的話。讓我們反匯編你的最后一個(gè)例子:
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個(gè)操作LOAD_FAST并STORE_FAST在b該b = b行。他們沒有取得任何有用的成果,但他們被執(zhí)行了。
添加回答
舉報(bào)
0/150
提交
取消