LINUX.ORG.RU

Как в питоне скопировать str?

 


0

2

str.split() возвращает массив, когда присваиваю переменным элементы массива, копируются указатели, а мне нужно данные.

Делать unicode(str.split()[n]) как-то оверхед... Чё-то сразу не нагуглил.

PS. Простите, в коде какие-то ошибки оказались, которые не связаны с этой придуманной проблемой. Просто симптомы уж очень были похожи...

Я всё проверил - строки в питоне принципиально копируются в таких ситуациях.

★★★★★

str.split() возвращает массив, когда присваиваю переменным элементы массива, копируются указатели, а мне нужно данные.

Какая разница? str - неизменяемый объект.

proud_anon ★★★★★ ()
$ python
Python 2.7.8 (default, Nov 10 2014, 08:19:18) 
[GCC 4.9.2 20141101 (Red Hat 4.9.2-1)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> a="aa bb cc"
>>> a
'aa bb cc'
>>> type(a)
<type 'str'>
>>> str.split(a)
['aa', 'bb', 'cc']
>>> type(str.split(a))
<type 'list'>
>>> "".join(str.split(a))
'aabbcc'
>>> type("".join(str.split(a)))
<type 'str'>
justAmoment ★★★★★ ()

Как в питоне скопировать str?

str1 = str2

Siado ★★★★★ ()

когда присваиваю переменным элементы массива, копируются указатели, а мне нужно данные.

WUT?

>>> s = "a b c"
>>> sl = s.split(" ")
>>> sl
['a', 'b', 'c']
>>> a = sl[0]
>>> a = 'a1'
>>> a
'a1'
>>> sl[0]
'a'
>>> 
Если бы это было так, как ты сказал, то в sl[0] должно оказаться 'a1'. Или я не правильно понял?

Kilte ★★★★★ ()
Ответ на: комментарий от Kilte

Ничего.
Вообще вопрос автором поставлен не корректно. Я вот вообще половины не понял. :-( Хотя может уже поздно...
Хотя можно написать свою реализацию списков. И сотворить такое :-D.

FIL ★★★★ ()
Последнее исправление: FIL (всего исправлений: 2)
Ответ на: комментарий от Kilte

Какой код? Давай твой распишу лучше.

>>> sl
['a', 'b', 'c'] # в sl находятся ссылки на три строковых объекта
>>> a = sl[0] # помещаем в a ссылку на 'a'
>>> a = 'a1' # помещаем в a ссылку на 'a1'
>>> a
'a1'
>>> sl[0]
'a'
>>>
А теперь ты расскажи, что ты хотел сказать этим куском кода.

Deleted ()

Ты непонел. В быдлоязычках, типо пистона, строки — это примитивные типы, неизменяемые. Поэтому, не имеет значения, с копией ты работаешь, или с оригиналом, «foo» — она и в Африке «foo», это всегда одна и та же строка, кто бы на нее не ссылался. Строки как настоящие объекты, возможны только в настоящем ООП, например в Io действительно можно скопировать строку:


foo := "baz" asMutable
bar := foo split join

foo removeLast

foo println # --> ba
bar println # --> baz

anonymous ()
Ответ на: комментарий от anonymous

В быдлоязычках, типо пистона
например в Io

А вот и царь пожаловал.

migesok ()
Ответ на: комментарий от anonymous

только в настоящем ООП, например в Io

Первый раз слышу про эту дрянь. Оно вообще хоть где-то применяется на практике?

sT331h0rs3 ★★★★★ ()

лор скатился в сраное говно. четырехзвездочник спрашивает как строку скопировать, трехзвездочник задает глупые вопросы про порядок байт... скоро начнут спрашивать с чего начинать изучать сишку и как передать параметр функции

anonymous ()
Ответ на: комментарий от Deleted

Всё, я понял, что ему нужно. Просто на первый взгляд мне показалось, что ему как-то удалось изменить значения элементов списка не обращаясь к ним напрямую.

Kilte ★★★★★ ()
Ответ на: комментарий от anonymous

лор скатился в сраное говно. четырехзвездочник спрашивает как строку скопировать, трехзвездочник задает глупые вопросы про порядок байт...

А анон все так же обмазывает всех дерьмом, все в порядке.

mopsene ★★★ ()
Ответ на: комментарий от Kilte

В том-то и дело, что мне тоже так показалось и я спросил у ЛОРа. Оказалось, это сочетание двух ошибок дало такой эффект.

Shadow ★★★★★ ()
Ответ на: комментарий от anonymous

Строки как настоящие объекты, возможны только в настоящем ООП

Бред.

в Io действительно можно скопировать строку

С иммутабельными строками это не нужно. Для остального есть copy.copy / copy.deepcopy . При желании можно сделать свои строки с блэкджеком и шлюхами, но надо чётко понимать зачем это делается. Для бинарных данных есть мутабельный bytearray.

true_admin ★★★★★ ()
Ответ на: комментарий от anonymous

скоро начнут спрашивать с чего начинать изучать сишку и как передать параметр функции

регулярно спрашивают же.

anonymous ()
Ответ на: комментарий от true_admin

С иммутабельными строками это не нужно.

Совершенно верно. Не нужно, потому что не можно.

При желании можно сделать

Это не удобно.

anonymous ()
Ответ на: комментарий от true_admin

Для остального

Для чего для остального, LOL? Для чисел? Для булевых значений? Для nil/nul или как там у вас?

anonymous ()
Ответ на: комментарий от true_admin

ну так ты так и говори, остальное — это значит все остальное(кроме строк в данном случае). Не вооди людей в заблуждение, а то ведь могут подумать, что в питоне есть поддержка ООП.

anonymous ()
Ответ на: комментарий от anonymous

Уже. Но С с Perl меня когда-то сильно напугали...

Shadow ★★★★★ ()
Ответ на: комментарий от mopsene

лор скатился в сраное говно.

А анон все так же обмазывает всех дерьмом, все в порядке.

онон глаголит правду-матку, как ему и положено

anonymous ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.