“剪切”字符串变量并将新部件分配给相同的变量名时的内存使用情况

时间:2013-04-23 15:17:59

标签: python string memory indexing

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

x='sdfghjk' 

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

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

新的x来了#34;而不是"在内存方面的旧的,还是我无缘无故地创建副本并使用额外的内存?

2 个答案:

答案 0 :(得分:3)

  

新的x在内存方面是“代替”旧的,还是我创建重复项,并且无缘无故地使用额外的内存。

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

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

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

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

答案 1 :(得分:0)

变量指向不同的内存。如你所见,

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

更改了x的ID并清除了旧内存