python - 为什么列表将自身重新分配为指针,尽管它被强制转换为列表并使用“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=b
,a
但b
似乎它们在此处链接,尽管它们被重新转换为a
列表。我也试过检查是否a is b
它给了我错误,但它显然似乎会自动更新我原来的ValuesDict[Number]
.
解决方案
推荐阅读
- performance - 其中并发读/写操作的数据库策略
- debugging - 反汇编代码是崩溃同化的准确选择吗?
- ios - 我需要在 init(coder) 和 init(size) 中注入属性吗?
- php - 如何将 2 个按钮链接到同一页面上的 2 个单独的 php 代码?
- sharepoint-online - 如何使用 sp.web (SPFX) 获取文档库中文件的 URL
- c++ - 输出不是我所期望的
- laravel - 单击按钮后输入值不保持值
- rest - 成功登录的预期状态代码是什么
- reactjs - Jest 快照不包括组件
- linux - 如何在 CentOS6 上将 glibc 从 2.12 版本升级到 2.15?