3 回答

TA貢獻1784條經驗 獲得超7個贊
我的理解: b 現在指的是兩個對象, . . .
那是不正確的。一個名稱不能同時與給定范圍內的多個對象相關聯。
b = a
與關聯的b
對象關聯。a
該行執行后,將沒有任何內容被引用['a', 'b']
,并且該列表應該符合垃圾回收條件,因為它不能再被使用。

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

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 的同一對象的副本
添加回答
舉報