Как я могу клонировать массив, чтобы иметь альтернативные поля true и false? - PullRequest
0 голосов
/ 05 января 2020

Я не могу понять, как Python работает с переменными и списками - я хочу клонировать 50-элементный массив в 100-элементный, но чтобы каждый элемент сопровождался элементом с такими же значениями и полями , но True вместо False для одного поля.

global A
A = list()

for i in range(100):
    A.append(0)

index = 0

for i in range(50):
    A[index] = self.b[i]
    A[index + 1] = self.b[i]
    print ("It was " + str(A[index].f)) # always prints False
    print ("It was " + str(A[index + 1].f)) # always prints False
    A[index].f = False # pointless, but just making sure in my insanity 
    A[index + 1].f = True
    print ("This should be false: " + str(A[index].f)) # always prints True 
    print ("This should be true: " + str(A[index+1].f)) # always prints True as well 

1 Ответ

0 голосов
/ 05 января 2020

Списки содержат только ссылки на объекты; если вы сделаете

    A[index] = self.b[i]
    A[index + 1] = self.b[i]

, тогда мутирование A[index] или A[index + 1] или self.b[i] приведет к мутированию одного и того же объекта.

Использование deepcopy, то есть

    A[index] = self.b[i]
    A[index + 1] = copy.deepcopy(self.b[i])

оставит вам отдельную копию для другого индекса.

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