В python я столкнулся с этим странным явлением, работая с модулем itertools groupby.
В python назначение переменной означает назначение новой переменной ее собственной памяти вместо указателя на исходную память (насколько я понимаю, если это неверно, сообщите мне):
y = 7
x = y
y = 9
x will still be 7
Тем не менее, когда я работал с модулем groupby, я использовал этот модуль для группировки элементов с одинаковым ключом в одну группу. Я хотел две группы, так как повторение исходной группы было бесполезным, поскольку память уже была изменена. Пример:
for key, group in groupby(rows, lambda x: x[0]):
data = [thing[1] for thing in group] #accesses 1st attribute of element
data2 = [thing[2] for thing in group] # would yield [] as group is empty
Поэтому я попробовал это вместо этого:
for key, group in groupby(rows, lambda x: x[0]):
#create a copy of group to reiterate over
toup = group
print toup #<itertools._grouper object at 0x1039a8850>
print group #<itertools._grouper object at 0x1039a8850>
data = [thing[1] for thing in group] #accesses 1st attribute of element
data2 = [thing[2] for thing in toup]
data2 должен получить доступ ко второму элементу, но дает [], поскольку они оба используют одну и ту же память
Мой вопрос: почему это происходит? Разве назначение группы toup не означает, что у toup будет копия памяти групп по другому шестнадцатеричному адресу?
Кроме того, что я могу сделать, чтобы обойти эту проблему, чтобы мне не приходилось писать две итерации groupby?
toup = group[:]
для создания копии. - person jonrsharpe   schedule 04.09.2014a = 1; b = a; a is b
будет по-прежнему равноTrue
, простоb += 1
не повлияет наa
(поскольку целые числа неизменяемы). - person jonrsharpe   schedule 04.09.2014