当我将字符串传递给函数时,python 是将整个字符串复制到新的内存位置还是等到我尝试从函数内部修改字符串?
谢谢 :)
Python 对每个不可变对象只有 1 个副本,无论您引用了多少变量。当使用所述字符串作为另一个函数的参数时,您只是将该引用传递给它。当您说“修改”时,发生的事情是 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