2015-10-15 1 views
1

В питона, внутри класса, оказывается, что при сохранении «я» переменную в другую, если я редактирую новую переменную, «я» также отредактирован:Как сохранить переменную «self» в python?

undropped_lines = self.flagged_lines 
    print self.flagged_lines 
    del undropped_lines[0] 
    print self.flagged_lines 

Как следует избегать эта черта в коде?

+1

Прочтите http://nedbatchelder.com/text/names.html подробное объяснение происходящего. Короче говоря, если оба имени указывают на изменяемое значение и вы изменяете значение, то оба имени * видят * обновление, потому что они все еще указывают на один и тот же объект. Если 'self.flagged_lines' был неизменным, и вы изменили' undropped_lines', тогда вы не увидели бы этого поведения. –

ответ

4

Это потому, что списки изменяемы, и когда вы говорите undropped_lines = self.flagged_lines, вы просто указываете новое имя в том же экземпляре.

Если вы хотите копию использовать undropped_lines = self.flagged_lines[:]

3

Это потому, что undropped_lines и self.flagged_lines указывают на одних и тех же данных. Подумайте об этом как о двух разных «именах», указывающих на одну и ту же сущность.

Вы можете обойти это, создав мелкую копию списка при назначении undropped_lines. Что-то вроде:

undropped_lines = list(self.flagged_lines) 
+0

Почти слово в слово 3 секунды друг от друга +1 – Holloway

+0

@Trengot: На самом деле помощник, +1 к вам тоже :) –

Смежные вопросы