Почему список переназначается как указатель, несмотря на то, что он приведен как список и передан False с помощью команды «is»? - PullRequest
0 голосов
/ 14 декабря 2018

Вот код:

ValuesDict = {}
PathwayTemplate = {}
GenerationDictionary = {0:[]}
StartNumbers = [2,3,5,7]
for Number in StartNumbers:
    PathwayTemplate.update({Number:0})
for Number in StartNumbers:
    ValuesDict.update({Number:[PathwayTemplate.copy()]})
    ValuesDict[Number][0][Number] += 1
    GenerationDictionary[0].append(Number)

Fin = 15

Gen = 0

while min(GenerationDictionary[Gen])<=Fin:
    Gen += 1
    GenerationDictionary.update({Gen:[]})
    for Number in GenerationDictionary[Gen-1]:
        for StartNumber in StartNumbers:
            if (Number+StartNumber) in ValuesDict.keys():
                pass
            else:
                ValuesDict.update({(Number+StartNumber):list(ValuesDict[Number])})
                for subpath in ValuesDict[(Number+StartNumber)]:
                    subpath[StartNumber]+=1
                GenerationDictionary[Gen].append((Number+StartNumber))
                print((Number+StartNumber),ValuesDict[(Number+StartNumber)])
    print()

И при первой итерации он выдает:

4 [{2: 2, 3: 0, 5: 0, 7: 0}]
9 [{2: 2, 3: 0, 5: 0, 7: 1}]
6 [{2: 0, 3: 2, 5: 0, 7: 0}]
8 [{2: 0, 3: 2, 5: 1, 7: 0}]
10 [{2: 0, 3: 2, 5: 1, 7: 1}]
12 [{2: 0, 3: 0, 5: 1, 7: 1}]
14 [{2: 0, 3: 0, 5: 0, 7: 2}]

Где я ожидал, что он даст мне одну 2 и одну 7 под 9.

Это означает сложение чисел и добавление сохраненного номера в результате.

Я попытался прочитать о том, как Python 3 экономит память и делает ссылку на тип указателя, когда a=b, поэтому, когда a изменяется, то же самое происходит и с ним.b, но может показаться, что они связаны здесь, несмотря на то, что они были преобразованы в список a.Я также попытался проверить, если a is b, и он дал мне ложь, однако, кажется, что он автоматически обновляет мой оригинальный ValuesDict[Number].

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