- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
bbb = {'name':'Sergey'}
class Race:
aaa = {'type' : 'Bubenchik'}
bbb = False
def __init__(self, type, name):
self.aaa['type'] = type
self.bbb = bbb
def __str__(self):
return "{} - {}, ".format(self.aaa['type'], self.bbb['name'])
if name == "__main__":
orc = Race('orc','Traal')
print(orc)
troll = Race('troll','Vasya')
troll.bbb['name'] = 'Ya skazal VASYA!'
print(troll)
print(orc)
print(bbb)
----------------------------------------
orc - Sergey,
troll - Ya skazal VASYA!,
troll - Ya skazal VASYA!,
{'name': 'Ya skazal VASYA!'}
Aypee 04.02.2017 02:50 # 0
Vindicar 04.02.2017 22:48 # 0
Утащил по словарь по ссылке, изменил, а потом удивляешься что оно изменилось?
Steve_Brown 06.02.2017 11:34 # +1
Vindicar 06.02.2017 12:31 # 0
И да, по-умолчанию передавать коллекции по значению - не очень умно. Ведь придётся делать копию, а откуда ты знаешь, какой у них размер? А если функция не изменяет аргумент, то вообще без разницы.
Поэтому проще передавать по ссылке. Просто надо документировать, если объект может быть изменен внутри функции. А то, блин, сделают неявную зависимость от глобальной переменной, а потом удивляются.
Единственное, где такой подход работает плохо - параметры по умолчанию. У них хранится только один экземпляр значения, и если его изменить - он изменится и для последующих вызовов функции. Это неудобно, да. Нужно явно копировать в таких случаях.
dxd 06.02.2017 12:46 # 0
Vindicar 06.02.2017 14:42 # 0
ФЗ, может решили что это дорогое удовольствие?
Steve_Brown 06.02.2017 14:30 # 0
то есть указатели все равно есть, просто называются ссылками и никак не выделяются синтаксически. И чтобы не запутаться, приходится об этом помнить.
Я хочу два типа сущностей - "объект" и "значение". Почему-то в С++ (если использую, скажем, Qt) я могу передать массив или словарь, не заботясь, что кто-то его может поменять. А в таком высокоуровневом Питоне или Сишарпе мне придется беспокоиться, вдруг кто что изменит, клонировать на всякий случай, что ли?
guest 04.02.2017 21:00 # 0