Python中的可变变量和内存管理

问题描述 投票:0回答:2

我想了解Python的内存管理是如何工作的。如果我有一个可变的变量,比如说一个list。

x = ['x1', 'x2']
print(id(x))

那么我将得到一个特定的内存地址。如果我现在修改x说 x.append('x3')由于列表是可突变的数据类型,所以内存地址和之前一样。但是,如果我用 x = x + ['x3'] 而我打印地址时却得到了不同的地址。为什么会这样?我的意思是... x 变量的名字还是一样的,我所做的只是修改它的内容。为什么Python会在这种情况下改变变量的地址?

python cpython
2个回答
0
投票

的时候。

x = x + ['x3']

你就会创建一个 新的 list 分配给 x. 以前的名单是以 "我的名字 "命名的。x 丢失,并进行垃圾回收(除非它存储在其他地方)。

创建一个新的元素,即使是以相同的名称存储,也会产生一个新的标识符。

另外请注意,如果你想在元素中附加 x3 (或另一个列表),因为复制原始列表来创建另一个列表,效率非常低。在你的情况下。x.append('x3') 是最快的方法,而 extend()x += ['x3','x4','x5'] 是最快的方法来追加(和突变)一个现有的多元素的列表。

(也注意到 += 列表会发生变化,但当使用在不可变类型上时,如 tuple但它仍然会产生另一个 tuple)


0
投票

变量在Python中是内存引用。当你说 x = x + ['x3'] 它合并 x['x3'] 并建立一个新的名单。从现在开始。x 是指向新建立的对象。这就是为什么你会得到一个不同的id。同时 ['x1', 'x2'] 对象被删除,因为没有任何东西指向该对象,因为 x 是指向新的对象。

© www.soinside.com 2019 - 2024. All rights reserved.