Как я могу скопировать строку 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] 

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

  • Python: импортировать модуль из другого каталога на том же уровне в иерархии проектов
  • Как сопоставить или вставить генераторы функций Python 2.7?
  • Получить последнее исключение в pdb
  • Как найти ближайшее простое число в массиве, другое число в этом массиве?
  • Как использовать строковое значение в качестве имени переменной в Python?
  • Присвоить 0 определенным словам, если слов нет
  • Как работает функция min / max в вложенном списке?
  • Python - невозможно установить запросы : операция не разрешена
  • 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 - лучший язык программирования в мире.