Поведение в стиле фанк Python при изменении набора переменных для атрибута объекта - PullRequest
0 голосов
/ 27 октября 2019

В настоящее время я делаю проект, в котором у меня есть объект G, и я передаю его в функцию foo (G), в которой я устанавливаю различные атрибуты G. Затем я устанавливаю новую переменную, равную одному из этих атрибутов. Однако, когда я изменяю эту переменную, она модифицирует базовый атрибут. Позвольте мне показать вам:

class Foo:
    def __init__(self):
        self.name = "name"

def npzeros(g):
    g.zeros = np.zeros((1,1))

f = Foo()
npzeros(f)
test = f.zeros
#test[:,-1]=test[:,-1]+1
#test = test+1

print(test)
print(f.zeros)

Когда я делаю test=test+1, я получаю:

[[1.]] [[0.]]

Когда я делаю test[:,-1]=test[:,-1]+1, я получаю:

[[1.]] [[1.]]

Я понятия не имею, почему эти два должны быть разными. Может кто-нибудь объяснить, что происходит?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...