亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

通過分配:Python

通過分配:Python

尚方寶劍之說 2023-05-23 16:11:59
我想理解以下代碼變體:a = [1, 2, 3]b = ab.append(4)b = ['a', 'b']print(a, b)我的理解是,變量指的是一個對象,該對象包含內存中某個位置的a列表,現在指的是所指的同一個對象,通過該鏈接,我們在技術上追加了一個非 b。[1,2,3]ba輸出:[1, 2, 3, 4] ['a', 'b']我稍微更新了代碼:a = [1, 2, 3]b = ['a', 'b']b = ab.append(4)print(a, b)我的理解:b 現在指的是兩個對象,第一個列表 ['a','b']和第二個列表(a最初指的是)[1,2,3]通過第三行b = a。輸出:[1, 2, 3, 4] [1, 2, 3, 4]最后的代碼變化:a = [1, 2, 3]b = ['a', 'b']b = ab.append(4)a.append(10)print(a, b)根據我目前的理解,我雖然第 3 行的鏈接b = a只提供了b引用多個對象(它自己的和a's)的能力并且a應該只引用一個對象[1,2,3],所以預期的輸出應該是:[1,2,3,4,10] [1,2,3,4]實際輸出:[1, 2, 3, 4, 10] [1, 2, 3, 4, 10]那么第 3 行的這個賦值b = a是否就像一個雙向鏈接?atob的對象也在哪里創建引用?如果我錯了,我希望有人能為我消除這種困惑并糾正我的想法。謝謝。
查看完整描述

3 回答

?
嚕嚕噠

TA貢獻1784條經驗 獲得超7個贊

我的理解: b 現在指的是兩個對象, . . .

那是不正確的。一個名稱不能同時與給定范圍內的多個對象相關聯。

b = a與關聯的b對象關聯。a該行執行后,將沒有任何內容被引用['a', 'b'],并且該列表應該符合垃圾回收條件,因為它不能再被使用。


查看完整回答
反對 回復 2023-05-23
?
茅侃侃

TA貢獻1842條經驗 獲得超21個贊

不要把對象想成指針,我認為那是你困惑的根源。這不是“b 指向 a”或“a 指向 b”,它與綁定到對象有關。我認為看看id會有用


>>> a = [1, 2, 3]

>>> id(a)

1833964774216

>>> b = a

>>> id(b)

1833964774216

在這種情況下,a和b都綁定到該列表。因此,任何要列出的突變1833964774216都會反映在兩個對象中。但我可以重新分配(或重新綁定)到一個完全不同的對象


>>> b = [4, 5, 6]

>>> id(b)

1833965089992

>>> b

[4, 5, 6]

這對沒有任何影響,a因為它仍然綁定到原始列表


>>> a

[1, 2, 3]

>>> id(a)

1833964774216


查看完整回答
反對 回復 2023-05-23
?
神不在的星期二

TA貢獻1963條經驗 獲得超6個贊

讓我們了解名稱和對象之間的區別。在您的例子中,a 和 b 是名稱,分配給 a 和 b 的列表“[1,2,3]”是對象。最初 a = [1,2,3] 并且在 a 被分配給 b 即 b=a 之后,在這種情況下 a 和 b 都綁定到同一個列表對象。這意味著您可以使用名稱 a 或 b 中的任何一個來更改該列表對象的值。

這可以通過將分配給 a 的列表復制到 b 來解決,

b = a.copy()

這將創建分配給 b 的同一對象的副本


查看完整回答
反對 回復 2023-05-23
  • 3 回答
  • 0 關注
  • 173 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號