首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Python:如何通过引用传递字符串?

Python:如何通过引用传递字符串?
EN

Stack Overflow用户
提问于 2012-11-28 23:45:26
回答 6查看 82K关注 0票数 31

从这个链接:How do I pass a variable by reference?,我们知道,当一个字符串(一个不可变的类型变量)被作为参数传递给一个函数时,它会复制它,但我认为如果字符串很大,它会浪费内存。在许多情况下,我们需要使用函数来包装字符串的一些操作,所以我想知道如何做得更有效?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2012-11-28 23:46:50

Python不会复制传递给函数的对象(包括字符串):

代码语言:javascript
复制
>>> def foo(s):
...     return id(s)
...
>>> x = 'blah'
>>> id(x) == foo(x)
True

如果您需要“修改”函数中的字符串,请返回新字符串,并将其分配回原始名称:

代码语言:javascript
复制
>>> def bar(s):
...     return s + '!'
...
>>> x = 'blah'
>>> x = bar(x)
>>> x
'blah!'

不幸的是,在对大型字符串进行小的更改时,这可能是非常低效的,因为大型字符串会被复制。处理这个问题的方法是将字符串放在一个列表中,一旦有了所有的部分,就把它们连接在一起。

票数 39
EN

Stack Overflow用户

发布于 2012-11-28 23:48:25

代码语言:javascript
复制
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  

但是对字符串的操作总是返回一个新的字符串对象。

票数 5
EN

Stack Overflow用户

发布于 2012-11-29 00:20:11

代码语言:javascript
复制
def modify_string( t ):
  the_string = t[0]
  # do stuff

modify_string( ["my very long string"] )
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13608919

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档