Из этой ссылки: Как передать переменную по ссылке?, мы знаем, что Python скопирует строку (неизменяемую переменную типа), когда она будет передана функция как параметр, но я думаю, что она будет тратить память, если строка огромна. Во многих случаях нам нужно использовать функции для переноса некоторых операций для строк, поэтому я хочу знать, как сделать это более эффективным?
Python: Как передать строку по ссылке?
Ответ 1
Python не делает копии объектов (включая строки) переданным функциям:
>>> def foo(s):
... return id(s)
...
>>> x = 'blah'
>>> id(x) == foo(x)
True
Если вам нужно "изменить" строку в функции, верните новую строку и верните ее в исходное имя:
>>> def bar(s):
... return s + '!'
...
>>> x = 'blah'
>>> x = bar(x)
>>> x
'blah!'
К сожалению, это может быть очень неэффективным при внесении небольших изменений в большие строки, потому что большая строка копируется. Питонический способ борьбы с этим состоит в том, чтобы удерживать строки в списке и объединять их вместе, когда у вас есть все части.
Ответ 2
Просто передайте его, как и любой другой параметр. Содержимое не будет скопировано, будет только ссылка.
Ответ 3
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 why they are called immutable
Но операции с строками всегда возвращают новый строковый объект.
Ответ 4
def modify_string( t ):
the_string = t[0]
# do stuff
modify_string( ["my very long string"] )