从这个链接:How do I pass a variable by reference?,我们知道,当一个字符串(一个不可变的类型变量)被作为参数传递给一个函数时,它会复制它,但我认为如果字符串很大,它会浪费内存。在许多情况下,我们需要使用函数来包装字符串的一些操作,所以我想知道如何做得更有效?
发布于 2012-11-28 23:46:50
Python不会复制传递给函数的对象(包括字符串):
>>> def foo(s):
... return id(s)
...
>>> x = 'blah'
>>> id(x) == foo(x)
True
如果您需要“修改”函数中的字符串,请返回新字符串,并将其分配回原始名称:
>>> def bar(s):
... return s + '!'
...
>>> x = 'blah'
>>> x = bar(x)
>>> x
'blah!'
不幸的是,在对大型字符串进行小的更改时,这可能是非常低效的,因为大型字符串会被复制。处理这个问题的方法是将字符串放在一个列表中,一旦有了所有的部分,就把它们连接在一起。
发布于 2012-11-28 23:48:25
In [7]: strs="abcd"
In [8]: id(strs)
Out[8]: 164698208
In [9]: def func(x):
print id(x)
x=x.lower() #perform some operation on string object, it returns a new object
print id(x)
...:
In [10]: func(strs)
164698208 # same as strs, i.e it actually passes the same object
164679776 # new object is returned if we perform an operation
# That's why they are called immutable
但是对字符串的操作总是返回一个新的字符串对象。
发布于 2012-11-29 00:20:11
def modify_string( t ):
the_string = t[0]
# do stuff
modify_string( ["my very long string"] )
https://stackoverflow.com/questions/13608919
复制相似问题