С этой ссылкой: How do I pass a variable by reference?, мы знаем, что Python скопирует строку (неизменяемую переменную типа), когда она передается функции как параметр, но я думаю, что она потеряет память, если строка огромна. Во многих случаях нам нужно использовать функции для переноса некоторых операций для строк, поэтому я хочу знать, как сделать это более эффективным?Python: Как передать строку по ссылке?
ответ
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!'
к сожалению, это может быть очень неэффективными при внесении небольших изменений в большие строки, поскольку большая строка копируется. Питонический способ борьбы с этим состоит в том, чтобы держать строки в списке и объединять их вместе, когда у вас есть все части.
Python никогда не проходит по ссылке. Он передает ссылки, но «pass by reference» уже используется для другого стиля передачи аргументов (который позволяет, например, использовать функцию swap (a, b) »). – delnan
@ delnan: Точка взята. Как бы вы это ни называли, Python не копирует объекты, на которые ссылаются имена, когда они назначены аргументам. –
Абсолютно. Это просто терминология, которая является проблематичной. То же самое касается других случаев назначения и для других объектов, поэтому вы можете обобщить свой ответ. – delnan
Просто передайте его, как и любой другой параметр. Содержимое не будет скопировано, будет только ссылка.
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's why they are called immutable
Но операции с строками всегда возвращают новый объект строки.
def modify_string(t):
the_string = t[0]
# do stuff
modify_string(["my very long string"])
- 1. Как передать строку по ссылке в VB.NET
- 2. Как передать строку в коллекцию по ссылке?
- 3. нужно передать строку по ссылке в Java
- 4. python - передать значение или по ссылке
- 5. Как передать структуру по ссылке?
- 6. Как передать свойство по ссылке
- 7. Как передать функцию по ссылке?
- 8. Как передать подстроку по ссылке?
- 9. ctypes передать строку по ссылке: строка не обновляется
- 10. передать массив по ссылке
- 11. передать HashMap по ссылке
- 12. передать массив по ссылке
- 13. Передать по ссылке
- 14. F # передать по ссылке
- 15. Как передать массив функции по ссылке?
- 16. Передать указатель/передать по ссылке в C
- 17. Невозможно передать объект по ссылке
- 18. Передать по ссылке TCL - резьба?
- 19. Схема R5RS: передать по ссылке
- 20. Java - передать переменную по ссылке
- 21. Передать по ссылке в java?
- 22. передать идентификатор по ссылке нажмите
- 23. Вернуть строку/пройти по ссылке
- 24. QuickSort, передать по ссылке, рекурсия
- 25. Передать по ссылке в классе
- 26. Попытка передать матрицу по ссылке
- 27. Передать по ссылке для блоков
- 28. Передать по ссылке в C++?
- 29. передать строку по ссылке при использовании JNA для доступа .dll
- 30. Как передать атрибут функции javascript по ссылке?
Я не уверен, что вы здесь просите ... у вас есть код, который демонстрирует проблему, с которой вы сталкиваетесь? –
> Мы знаем, что Python скопирует строку (неизменяемую переменную типа), когда она передается функции как параметр. Вы, конечно же, не знаете этого! Python никогда ничего не копирует. –