python函数在列表中增加变量没有明显的原因

纳拉亚纳(Narayana)

因此,我是Python的新手,但遇到了我不明白的问题。这是代码:

(enemy和playerPos都是包含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

这是Shell中显示的内容:

[1, 2]
[2, 2]
[2, 2]

为什么startPos第二次打印时与众不同?我在功能中根本没有修改它

AJ Uppal

这是因为列表是可变的,因此将它们分配给两个不同的值意味着这两个值都引用相同的列表:

>>> x = [2, 2]
>>> y = x
>>> z = x
>>> z[1] = 0
>>> z
[2, 0]
>>> y
[2, 0]

您也可以通过查看ids进行检查

>>> 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

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在Google Chrome浏览器的某些网页中,字体更改没有明显原因

来自分类Dev

没有明显原因的变量变化

来自分类Dev

没有明显原因的BufferedReader返回Null

来自分类Dev

没有明显原因的“语法错误:语法无效”

来自分类Dev

没有明显原因的Oracle ORA-01036非法变量名称/编号

来自分类Dev

为QTextEdit设置字体没有明显原因

来自分类Dev

没有明显原因的元素仅在Safari中不可见

来自分类Dev

通过变量或没有括号在python中调用函数

来自分类Dev

R表达导致NaN的原因没有明显原因

来自分类Dev

没有明显原因的“无”打印

来自分类Dev

没有明显原因,Python Keras代码内存不足

来自分类Dev

Python-如果我增加列表的大小,为什么我的for循环的长度函数没有变化

来自分类Dev

智能合约函数调用上的ValidationError没有明显原因(web3py)?

来自分类Dev

多媒体文件的大小更改没有明显原因

来自分类Dev

没有明显原因的StackOverflowException。

来自分类Dev

电脑要花几个小时才能启动,没有明显的原因

来自分类Dev

Ruby / Gem更改数组没有明显原因

来自分类Dev

没有明显的原因未定义功能

来自分类Dev

Vim segfaulting没有明显原因

来自分类Dev

$ _GET变量在两个控制器中的功能有所不同,没有明显的原因(Yii)

来自分类Dev

这种元素异常没有明显的原因

来自分类Dev

Windows 10没有明显原因从睡眠中唤醒

来自分类Dev

没有明显原因的缺少括号的错误

来自分类Dev

没有明显原因的WSA 10049错误

来自分类Dev

QTreeView崩溃没有明显原因

来自分类Dev

硬盘没有明显原因从睡眠中唤醒

来自分类Dev

Python变量/计数没有增加

来自分类Dev

CSS 没有显示,因为没有明显的原因 <head> 没有出现在 _site 文件夹中

来自分类Dev

没有明显原因没有正确安装python模块

Related 相关文章

  1. 1

    在Google Chrome浏览器的某些网页中,字体更改没有明显原因

  2. 2

    没有明显原因的变量变化

  3. 3

    没有明显原因的BufferedReader返回Null

  4. 4

    没有明显原因的“语法错误:语法无效”

  5. 5

    没有明显原因的Oracle ORA-01036非法变量名称/编号

  6. 6

    为QTextEdit设置字体没有明显原因

  7. 7

    没有明显原因的元素仅在Safari中不可见

  8. 8

    通过变量或没有括号在python中调用函数

  9. 9

    R表达导致NaN的原因没有明显原因

  10. 10

    没有明显原因的“无”打印

  11. 11

    没有明显原因,Python Keras代码内存不足

  12. 12

    Python-如果我增加列表的大小,为什么我的for循环的长度函数没有变化

  13. 13

    智能合约函数调用上的ValidationError没有明显原因(web3py)?

  14. 14

    多媒体文件的大小更改没有明显原因

  15. 15

    没有明显原因的StackOverflowException。

  16. 16

    电脑要花几个小时才能启动,没有明显的原因

  17. 17

    Ruby / Gem更改数组没有明显原因

  18. 18

    没有明显的原因未定义功能

  19. 19

    Vim segfaulting没有明显原因

  20. 20

    $ _GET变量在两个控制器中的功能有所不同,没有明显的原因(Yii)

  21. 21

    这种元素异常没有明显的原因

  22. 22

    Windows 10没有明显原因从睡眠中唤醒

  23. 23

    没有明显原因的缺少括号的错误

  24. 24

    没有明显原因的WSA 10049错误

  25. 25

    QTreeView崩溃没有明显原因

  26. 26

    硬盘没有明显原因从睡眠中唤醒

  27. 27

    Python变量/计数没有增加

  28. 28

    CSS 没有显示,因为没有明显的原因 <head> 没有出现在 _site 文件夹中

  29. 29

    没有明显原因没有正确安装python模块

热门标签

归档