Вот код:
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]
.