首页 > 解决方案 > 为什么列表将自身重新分配为指针,尽管它被强制转换为列表并使用“is”命令传递 False?

问题描述

这是代码:

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=bab似乎它们在此处链接,尽管它们被重新转换为a列表。我也试过检查是否a is b它给了我错误,但它显然似乎会自动更新我原来的ValuesDict[Number].

标签: pythonpython-3.xlistdictionary

解决方案


推荐阅读