Как я могу скопировать строку Python?

Я делаю это:

a = 'hello' 

И теперь мне просто нужна независимая копия:

 import copy b = str(a) c = a[:] d = a + '' e = copy.copy(a) map( id, [ a,b,c,d,e ] ) 

Из [3]:

 [4365576160, 4365576160, 4365576160, 4365576160, 4365576160] 

Почему все они имеют одинаковый адрес памяти и как я могу получить копию?

4 Solutions collect form web for “Как я могу скопировать строку Python?”

Вам не нужно копировать строку Python. Они неизменяемы, и модуль copy всегда возвращает оригинал в таких случаях, как str() , весь фрагмент строки и конкатенацию пустой строкой.

Кроме того, ваша строка 'hello' интернирована ( некоторые строки ). Python преднамеренно пытается сохранить только одну копию, поскольку это ускоряет поиск в словаре.

Один из способов, которым вы могли бы обойти это, – это создать новую строку, а затем отрезать эту строку до исходного содержимого:

 >>> a = 'hello' >>> b = (a + '.')[:-1] >>> id(a), id(b) (4435312528, 4435312432) 

Но все, что вы делаете сейчас, – это потеря памяти. В конце концов, вы не можете каким-либо образом изменить эти строковые объекты.

Если вы хотите знать, сколько памяти требуется объекту Python, используйте sys.getsizeinfo() ; он дает вам объем памяти любого объекта Python.

Для контейнеров это не включает содержимое; вам придется переписывать каждый контейнер, чтобы вычислить общий объем памяти:

 >>> import sys >>> a = 'hello' >>> sys.getsizeof(a) 42 >>> b = {'foo': 'bar'} >>> sys.getsizeof(b) 280 >>> sys.getsizeof(b) + sum(sys.getsizeof(k) + sys.getsizeof(v) for k, v in b.items()) 360 

Затем вы можете использовать отслеживание id() для получения фактического объема памяти или для оценки максимального объема, если объекты не кэшируются и не используются повторно.

Вы можете скопировать строку в python с помощью форматирования строки:

 >>> a = 'foo' >>> b = '%s' % a >>> id(a), id(b) (140595444686784, 140595444726400) 

Я только начинаю некоторые струнные манипуляции и нашел этот вопрос. Я, вероятно, пытался сделать что-то вроде OP, «обычный меня». Предыдущие ответы не прояснили мое замешательство, но, немного подумав об этом, я, наконец, «получил».

Пока значения a , b , c , d и e имеют одинаковое значение, они ссылаются на одно и то же место. Память сохраняется. Как только переменная начинает иметь разные значения, они начинают иметь разные ссылки. Мой опыт обучения исходил из этого кода:

 import copy a = 'hello' b = str(a) c = a[:] d = a + '' e = copy.copy(a) print map( id, [ a,b,c,d,e ] ) print a, b, c, d, e e = a + 'something' a = 'goodbye' print map( id, [ a,b,c,d,e ] ) print a, b, c, d, e 

Печатный результат:

 [4538504992, 4538504992, 4538504992, 4538504992, 4538504992] hello hello hello hello hello [6113502048, 4538504992, 4538504992, 4538504992, 5570935808] goodbye hello hello hello hello something 

Копирование строки может быть выполнено двумя способами: либо скопировать местоположение a = "a" b = a, либо вы можете клонировать, что означает, что b не будет затронуто при изменении, которое выполняется a = 'a' b = a [:]

  • Разделение списка на неравные группы?
  • Как получить доступ к переменным из файла, переданного через командную строку
  • Найти общую подстроку между двумя строками
  • Вращающийся список в Python без collection.deque
  • Асинхронное извлечение информации из процесса
  • Python: список списка списков списков
  • Удаление идентификатора набора при печати наборов в Python
  • Сделать utf8 доступным для чтения в файле
  • Как найти ближайшее простое число в массиве, другое число в этом массиве?
  • Список вложенного словаря в python
  • Определение глобальной функции в скрипте Python
  • Python - лучший язык программирования в мире.