在将不可变变量传递给函数时,python是否使用copy-on-write?

时间:2015-05-15 23:36:28

标签: python copy-on-write

当我将一个字符串传递给一个函数时,python是否会将整个字符串复制到一个新的内存位置,或者等到我尝试从函数内部修改字符串之后呢?

谢谢:)

2 个答案:

答案 0 :(得分:3)

Python每个不可变对象只有1个副本,无论你引用了多少变量。当使用所述字符串作为另一个函数的参数时,您只是将该引用传递给它。当你说“修改”时会发生什么,python只是改变了那个引用(如果没有使用arleady,也会创建新的字符串,并最终删除旧的字符串,而不是在其他地方引用它)。

答案 1 :(得分:0)

通过引用传递(并且您必须使用global在每个范围规则的函数内更改它):

In [31]: def t():
   ....:     global s
   ....:     print id(s)
   ....:     s = 'foo'
   ....:     print id(s)
   ....:
In [36]: s = 'spam'

In [37]: id(s)
Out[37]: 4471963392

In [38]: t()
4471963392
4467742200