标题可能不是我的问题的正确措辞,但我对编程还是很陌生,尤其是对 Web 开发等方面的新手。
在正常的 python 环境中,对变量的引用不会影响原始对象。所以:
x = 1
y = x
y += 1
print x,y
>>> 1, 2
同样,如果我这样做...
x = [[1,2], [3,4]]
y = x[0]
z = y[0] + 1
print x
>>> [[1, 2], [3, 4]]
但是,在 Google App Engine 中,如果我执行上述示例,则会得到:
print x
>>> [[2, 2], [3, 4]]
所以,我的问题是这个。怎么回事?
我有一个类似于 的列表x
,但更大,我可以访问(无需修改)并使用该数据构建其他列表。然后,当我更改新列表的内容时,它也会更改原始列表中的内容。因此,当我刷新网页时,我希望得到与首次加载时相似的结果,但原始列表已完全改变。之后的每次刷新只会让情况变得越来越糟。现在,我花了几个小时逐行检查我的所有代码,现在我确信这不是我的代码。那么,GAE 的工作方式与我预期的不同吗?这是正常行为吗?更重要的是,我到底该如何修复它(让它像普通的 python 解释器一样工作)?
编辑:
好的,所以我刚刚确认了。我有一个全局不可变常量,称为SKILLS
. 然后我做all_skills = SKILLS
。稍后我循环all_skills
并抽出 10 个随机技能(SKILLS 是一个包含表示游戏技能的列表的元组)并将它们分配给一个类实例变量。然后我确认 SKILLS 是未修改的,然后修改了类变量,当我重新检查 SKILLS 时,类变量中更改的所有技能也在 SKILLS 中更改,除非我完全误解了某些东西,否则这应该是不可能的。
如果您特别好奇,可以查看有问题的两个模块https://github.com/jtsmith1287/gurpscg/blob/master/charbuilder.py和https://github.com/jtsmith1287/gurpscg/blob/master /skills.py 如果您想查看应用程序的功能,只需加载http://gurpscgtest.appspot.com并刷新几次并查看表格。