Как я могу скопировать строку 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
  • Группировка ключей словаря Python в виде списка и создание нового словаря с этим списком в качестве значения
  • Запись цифр числа в массив
  • Перечислить дублирование конкатенации данных в python
  • Искать словарь Python, где значение указано
  • Элементный продукт двух двумерных списков
  •  
    Interesting Posts for Van-Lav

    Docstring для переменной

    «Ошибка Windows: не удалось правильно инициализировать DLL-провайдера» при импорте модуля cgi в замороженном приложении wxpython

    Выполнение преобразования ширины штриха (SWT) (Python)

    Как написать символы конца строки Unix в Windows с помощью Python

    Python3: вычисление комплексных показателей и логарифмов

    Настройка пути к App Engine для PyDev на Mac

    Как сделать простой Pika SelectConnection для отправки сообщения в python?

    Как читать целые числа из файла, который является 24-битным и маленьким, с использованием Python?

    Jython встроен в Java – ImportError: нет модуля с именем yaml

    Найти физические координаты пикселя в файле fits с помощью python

    Построение векторов в системе координат с R или python

    Python – отправлять электронную почту, когда исключается исключение?

    Функция Max () с использованием питона из цикла

    Исключение ререйза / перезаписи Python

    Python numpy: см., Если массив симметричен в пределах допуска

    Python - лучший язык программирования в мире.