почему python удаляет функцию, влияющую на экземпляр класса - PullRequest
0 голосов
/ 11 декабря 2018

Я запускаю этот код со следующим выводом, но я не хочу, чтобы .remove () влиял на экземпляр класса.

class dumby:
    def __init__(self):
        a = []


test1 = dumby()
A = [1,1]
test1.a = A
print(test1.a)
A.remove(A[0])
print(test1.a)

Вывод

[1, 1]
[1]

Я хочу получить вывод

[1, 1]
[1, 1]

Пожалуйста, помогите!

1 Ответ

0 голосов
/ 11 декабря 2018

Переменные Python (или атрибуты-члены) на самом деле содержат ссылки на объекты.Некоторые объекты являются неизменяемыми (числа, строки), но большинство и особенно списки.Поэтому, когда вы изменяете изменчивый объект, это затрагивает все ссылки на него, независимо от того, какая ссылка использовалась для его изменения.

Это именно то, что произошло здесь:

test1 = dumby()  # ok, you create a new dumby
A = [1,1]        # ok you create a new list referenced by A
test1.a = A      # test1.a now references the same list
print(test1.a)
A.remove(A[0])   # the list is modified
print(test1.a)   # you can control that the list is modified through the other ref.

Что вы хотитесделать, чтобы назначить копию оригинального списка:

test1.a = A[:]   # test1.a receives a copy of A (an independent object)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...