Уведомления

Группа в Telegram: @pythonsu

#1 Авг. 2, 2018 21:39:12

DamMercul
Зарегистрирован: 2017-11-26
Сообщения: 325
Репутация: +  13  -
Профиль   Отправить e-mail  

Переменная ссылается на другую

Проблема:

 >>> 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, она создает место в памяти и засовывает туда объект, а не ссылку на адрес памяти



____________________________________________________

 # Life loop
while alive:
    if (fun > boredom) and money:
        pass_day(fun, boredom, money)
        continue
    else: break

Отредактировано DamMercul (Авг. 2, 2018 21:42:03)

Офлайн

#2 Авг. 2, 2018 22:37:26

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10031
Репутация: +  857  -
Профиль   Отправить e-mail  

Переменная ссылается на другую

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 - откровенная параша
Ты просто поразрабатывай на том и на этом - сразу поймёшь эту разницу. С питоном у тебя будет куча программ, с явой у тебя будет одна программа с кучей проблем.



Отредактировано py.user.next (Авг. 2, 2018 22:40:26)

Офлайн

#3 Авг. 2, 2018 23:30:12

DamMercul
Зарегистрирован: 2017-11-26
Сообщения: 325
Репутация: +  13  -
Профиль   Отправить e-mail  

Переменная ссылается на другую

py.user.next
Ты просто поразрабатывай на том и на этом - сразу поймёшь эту разницу. С питоном у тебя будет куча программ, с явой у тебя будет одна программа с кучей проблем
Да-да, все так говорят. Я на яве тоже пишу. Вполне себе так нормально, даже небольшие сходства с C есть. Мне в яве нравится это ООП везде. Куда не глянь, везде ООП. Даже если не хочешь, все равно будет ООП. Даже парится по этому счету не надо, просто по другому на яве писать невозможно. А насчет проблем ты прав, их больше



____________________________________________________

 # Life loop
while alive:
    if (fun > boredom) and money:
        pass_day(fun, boredom, money)
        continue
    else: break

Офлайн

#4 Авг. 3, 2018 09:56:01

PEHDOM
Зарегистрирован: 2016-11-28
Сообщения: 2196
Репутация: +  294  -
Профиль   Отправить e-mail  

Переменная ссылается на другую

DamMercul
UPDATE: Немного шарю в Java, там такой шняги нет,
Наверно в этом и проблема, я тоже когда первый раз увидел пайтон “немного шарил” в других ЯП, поэтому самые простые вещи, как то типы ,присваивание и прочее пропустил или прочитал по диагонали, а зря, как оказалось потом.
Погули что такое в пайтоне ссылочные и атомарные типы данных и чем отличаються операции над ними, когда объявляеться тип переменной, что пайтон кеширует для ускорения, это самые азы, и обясняется буквально в первых главах любого учебника по пайтону. Многие “детские” вопросы сразу отпадут.



==============================
Помещайте код в теги:
[code python][/code]
Бериегите свое и чужое время.

Отредактировано PEHDOM (Авг. 3, 2018 10:10:57)

Офлайн

#5 Авг. 3, 2018 11:01:20

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10031
Репутация: +  857  -
Профиль   Отправить e-mail  

Переменная ссылается на другую

DamMercul
Даже парится по этому счету не надо, просто по другому на яве писать невозможно.
Оператор new есть, а оператора delete нет - тебя это не смущает? Ты даже не можешь контролировать, сколько памяти занято в данный момент. А когда ошибка какая-нибудь происходит, надо полчаса искать её причину, потому что в Java нихрена не информативно. Так она вообще может показывать, что ошибка там-то находится, а на самом деле она в другом месте. Короче, времени с ней теряется очень много. В питоне же любая ошибка сразу на виду, быстро её правишь и продолжаешь.



Офлайн

#6 Авг. 8, 2018 03:19:05

DamMercul
Зарегистрирован: 2017-11-26
Сообщения: 325
Репутация: +  13  -
Профиль   Отправить e-mail  

Переменная ссылается на другую

py.user.next
В яве на этот случай есть очиститель.



____________________________________________________

 # Life loop
while alive:
    if (fun > boredom) and money:
        pass_day(fun, boredom, money)
        continue
    else: break

Офлайн

#7 Авг. 8, 2018 03:20:41

DamMercul
Зарегистрирован: 2017-11-26
Сообщения: 325
Репутация: +  13  -
Профиль   Отправить e-mail  

Переменная ссылается на другую

PEHDOM
ОК, я изучу вопрос, но про это в книге не писали. Я как чайник читал Марка Лутца. Он вроде как умный, но в 2х томах про питон про это не писали



____________________________________________________

 # Life loop
while alive:
    if (fun > boredom) and money:
        pass_day(fun, boredom, money)
        continue
    else: break

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version