Найти - Пользователи
Полная версия: Переменная ссылается на другую
Начало » Python для новичков » Переменная ссылается на другую
1
DamMercul
Проблема:
 >>> a = [1, 2, 3, 4, 5]
>>> b = a
>>> b += [6]
>>> b == a
True
>>> a
[1, 2, 3, 4, 5, 6]
>>> b
[1, 2, 3, 4, 5, 6]
>>> id(a) == id(b)
True
Как сделать так, чтобы переменная создавалась новая, но с контентом другой. В этом примере можно просто сделать
 b = a[:]
, но вот как это сделать, например, с числом, или булевым значением?:
 >>> a = True
>>> b = a
>>> a == b
True
>>> id(a) == id(b)
True

UPDATE: Немного шарю в Java, там такой шняги нет, так как ты должен использовать new, она создает место в памяти и засовывает туда объект, а не ссылку на адрес памяти
py.user.next
DamMercul
Немного шарю в Java, там такой шняги нет
В смысле нет? Скаляры все пишутся в одну область памяти, потом на эту область ссылаются все одинаковые. Если две строки одинаковые, то же самое происходит - ссылаются на одну строку. Иначе так никакой памяти не хватит.

  
>>> import copy
>>> 
>>> n = 1
>>> m = copy.copy(n)
>>> n is m
True
>>> 
>>> lst1 = [1, 2, 3]
>>> lst2 = copy.copy(lst1)
>>> lst1 is lst2
False
>>>

DamMercul
там такой шняги нет
Если уж холивар начинать Python vs Java, то Java - откровенная параша
Ты просто поразрабатывай на том и на этом - сразу поймёшь эту разницу. С питоном у тебя будет куча программ, с явой у тебя будет одна программа с кучей проблем.
DamMercul
py.user.next
Ты просто поразрабатывай на том и на этом - сразу поймёшь эту разницу. С питоном у тебя будет куча программ, с явой у тебя будет одна программа с кучей проблем
Да-да, все так говорят. Я на яве тоже пишу. Вполне себе так нормально, даже небольшие сходства с C есть. Мне в яве нравится это ООП везде. Куда не глянь, везде ООП. Даже если не хочешь, все равно будет ООП. Даже парится по этому счету не надо, просто по другому на яве писать невозможно. А насчет проблем ты прав, их больше
PEHDOM
DamMercul
UPDATE: Немного шарю в Java, там такой шняги нет,
Наверно в этом и проблема, я тоже когда первый раз увидел пайтон “немного шарил” в других ЯП, поэтому самые простые вещи, как то типы ,присваивание и прочее пропустил или прочитал по диагонали, а зря, как оказалось потом.
Погули что такое в пайтоне ссылочные и атомарные типы данных и чем отличаються операции над ними, когда объявляеться тип переменной, что пайтон кеширует для ускорения, это самые азы, и обясняется буквально в первых главах любого учебника по пайтону. Многие “детские” вопросы сразу отпадут.
py.user.next
DamMercul
Даже парится по этому счету не надо, просто по другому на яве писать невозможно.
Оператор new есть, а оператора delete нет - тебя это не смущает? Ты даже не можешь контролировать, сколько памяти занято в данный момент. А когда ошибка какая-нибудь происходит, надо полчаса искать её причину, потому что в Java нихрена не информативно. Так она вообще может показывать, что ошибка там-то находится, а на самом деле она в другом месте. Короче, времени с ней теряется очень много. В питоне же любая ошибка сразу на виду, быстро её правишь и продолжаешь.
DamMercul
py.user.next
В яве на этот случай есть очиститель.
DamMercul
PEHDOM
ОК, я изучу вопрос, но про это в книге не писали. Я как чайник читал Марка Лутца. Он вроде как умный, но в 2х томах про питон про это не писали
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB