python - 无需任何显式调用即可更改变量值

标签 python python-3.x variables

<分区>

在 Python 3.0 中,如果我为 Hangman 游戏运行以下代码

secretWord = list("Apple")
compareWord = secretWord
print("".join(secretWord))

for (index , alphabet) in enumerate(secretWord):
    compareWord[index] = "_"

print("".join(secretWord))

结果是

Apple
_____

为什么改密语了?我只想修改 compareWord,以便它从 secretWord 改为具有下划线。

最佳答案

发生这种情况是因为 secretWordcompareWord 都指向同一个列表。

第一行代码从字符串 Apple 创建一个新列表,并将该列表分配给 secretWord。第二行将此列表分配给 compareWord - 现在两个变量都指向同一个列表! for 循环将列表中的每个项目更改为下划线。打印此列表时,它会正确显示 5 个下划线。

如果将 print("".join(secretWord)) 调用移至循环之后,您将看到该调用的输出也已更改为 5 个下划线。

解决此问题的一个简单方法是将列表的副本分配给 compareWord(即,一个新列表,但具有与旧列表相同的内容)。例如:

  • 切片:compareWord = secretWord[:]
  • 新列表调用:compareWord = List(secretWord)

有关如何在 Python 中克隆列表的一些详细信息,请参阅 How to clone or copy a list?

有关 Python 和列表的一些介绍,请参阅 https://developers.google.com/edu/python/lists ,这也很好地说明了您遇到的问题。

关于python - 无需任何显式调用即可更改变量值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42413094/

相关文章:

python - 如何结合 gstreamer 和 opencv?

python - Flask_SQLAlchemy create_all() 不起作用

python - 名称错误 : name 'reload' is not defined

javascript - 访问全局变量和异步问题

python - 如何在 df.iterrows() 期间删除 Pandas 数据框中的当前行

Python:如何在循环中从 `print` 调用 `eval`?

python - 将数据与另一个数据框中两列中的数据进行比较以填充第一个数据框中的第三列

python - 如何在 TensorFlow 图中正确引发异常

javascript - 使用 var 与 let/const 的 block 级变量重新声明

python - 在 Pandas 中处理多位数的小数,