【发布时间】:2014-09-08 09:05:18
【问题描述】:
我这样做:
a = 'hello'
现在我只想要a 的独立副本:
import copy
b = str(a)
c = a[:]
d = a + ''
e = copy.copy(a)
map( id, [ a,b,c,d,e ] )
输出[3]:
[4365576160, 4365576160, 4365576160, 4365576160, 4365576160]
为什么它们都有相同的内存地址,我怎样才能得到a的副本?
【问题讨论】:
-
要获得与 Martijin 不同的答案(这是完全正确的,但不一定如所述回答问题),您可能需要提供更多详细信息/用例以显示 为什么你想复制它。
-
正如@elemo 所暗示的,这可能是XY Problem。
-
我有兴趣估计
d[ 'hello' ] = e形式的嵌套字典的内存使用情况,其中e[ 'hi' ] = 'again'。为了生成这样一个嵌套字典,我生成了一个e字典并多次复制它。我注意到内存消耗非常低,这导致了我的问题。现在我知道没有创建字符串副本,因此内存消耗低。 -
如果您希望
b是a的修改版本而不修改a,只需让b成为任何操作的结果。例如b = a[2:-1]将b设置为'll'和a仍然是 'hello'。 -
奥利是正确的。这是因为 str 是不可变类型。由于 python 使用单例(可能还有其他内部优化),复制 e 字典时不会像预期的那样看到内存扩展。
标签: python string python-2.7