所以我是Python的新手,我有这个问题,我不明白。这是代码:
(敌人和玩家都是包含2个变量的列表,例如[1,2])
def AIenemyTurn(enemy,playerPos):
startPos = enemy
print(startPos)
potEnemyPos = enemy
if playerPos[0] > enemy[0]:
potEnemyPos[0] += 1
elif playerPos[0] < enemy[0]:
potEnemyPos[0] -= 1
elif playerPos[1] > enemy[1]:
potEnemyPos[1] += 1
elif playerPos[1] < enemy[1]:
potEnemyPos[1] -= 1
if potEnemyPos not in rocks:
print(potEnemyPos)
print(startPos)
return potEnemyPos
else:
return startPos
这是壳牌中出现的内容:
[1, 2]
[2, 2]
[2, 2]
为什么startPos在第二次打印时有所不同?我还没有在函数中修改它
答案 0 :(得分:1)
这是因为列表是可变的,因此将它们分配给两个不同的值意味着这两个值都引用相同的列表:
>>> x = [2, 2]
>>> y = x
>>> z = x
>>> z[1] = 0
>>> z
[2, 0]
>>> y
[2, 0]
您还可以查看id
s:
>>> id(y)
4300734408
>>> id(z)
4300734408
>>> id(x)
4300734408
>>>
解决此问题的一种方法是致电startPos = list(enemy)
,因为转换为list
会生成一个新列表:
>>> a = [1, 2]
>>> b = list(a)
>>> id(a)
4300922320
>>> id(b)
4300922680
>>>
以下是您编辑的代码:
def AIenemyTurn(enemy,playerPos):
startPos = list(enemy)
print(startPos)
potEnemyPos = enemy
if playerPos[0] > enemy[0]:
potEnemyPos[0] += 1
elif playerPos[0] < enemy[0]:
potEnemyPos[0] -= 1
elif playerPos[1] > enemy[1]:
potEnemyPos[1] += 1
elif playerPos[1] < enemy[1]:
potEnemyPos[1] -= 1
if potEnemyPos not in rocks:
print(potEnemyPos)
print(startPos)
return potEnemyPos
else:
return startPos