3

这里的基本python问题:说我有一个字符串变量

x='sdfghjk' 

我只需要使用字符串的一些字符,并将它们分配给相同的名称,例如

x=x[x.index('g'):]

就内存而言,新的x“代替”旧的,还是我创建了重复项并无缘无故地使用了额外的内存?

4

2 回答 2

4

就内存而言,新的 x 是否“代替”了旧的 x,还是我创建了重复项,并且无缘无故地使用了额外的内存。

Python 字符串是不可变的,因此您正在创建一个副本,这将需要更多内存。如果你改为...

>>> x = 'sdfghjk'
>>> x = buffer(x, x.index('g'))
>>> print x
ghjk

...您会得到类似的结果,但该x变量现在指的是分配原始字符串的同一块内存,如果您正在处理大量字符串,这可能会更可取。

或者,如果您想要一个可变字符串,请尝试使用bytearray.

于 2013-04-23T15:24:35.813 回答
0

变量指向不同的内存。正如你看到的,

>>> x='gewfsafg'
>>> id(x)
140290029218384
>>> x=x[x.index('f'):]
>>> x
'fsafg'
>>> id(x)
140290029218288

x的id变了,旧的内存被清理了

于 2013-04-23T15:22:18.817 回答