Когда я передаю строку функции, python копирует всю строку в новое место в памяти или ждет, пока я не попытаюсь изменить строку внутри функции?
Спасибо :)
Когда я передаю строку функции, python копирует всю строку в новое место в памяти или ждет, пока я не попытаюсь изменить строку внутри функции?
Спасибо :)
В Python есть только одна копия каждого неизменяемого объекта, независимо от того, сколько переменных вы на него ссылаетесь. При использовании указанной строки в качестве аргумента другой функции вы только передаете ей эту ссылку. Когда вы говорите «изменить», происходит то, что 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