python 将不可变变量传递给函数时是否使用写时复制?

Does python use copy-on-write when passing an immutable variable to a function?

当我将一个字符串传递给一个函数时,python 是将整个字符串复制到一个新的内存位置还是等到我尝试从函数内部修改该字符串?

谢谢:)

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

通过引用传递(并且您必须使用 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