python - 尽管每个循环只分配一次变量,但为什么变量会发生变化?

标签 python

我正在研究康威生命游戏的简单版本。当我输入诸如 0001 之类的内容时,输出应该是 1010。程序将 1 和 0 作为 bool 值处理。

在下面的代码片段中,我打印了“copy”变量,该变量每一代应该只改变一次。相反,每次 for 循环循环时它都在改变。为什么“副本”会发生变化? “状态”不应该是唯一改变的东西吗?

def adj(state,i):
    a = b = False
    if i == 0: #checking on left wall
        a = state[-1]
        b = state[i+1]
    elif i == len(state)-1: #checking on right wall
        a = state[i-1]
        b = state[0]
    else: #checking in the middle
        a = state[i-1]
        b = state[i+1]
    return [a,b].count(True)

def evolve(state):
    copy = state #changes are made to state based on the copy
    for i in range(len(copy)):
        print(copy)
        if adj(copy,i) == 1:
            state[i] = True
        else:
            state[i] = False
    return state

最佳答案

这行代码:

copy = state

制作“状态”的单独副本。 “copy”和“state”现在指的是同一个列表对象。

如果您想要一个单独的副本,请改用切片:

copy = state[:]

关于python - 尽管每个循环只分配一次变量,但为什么变量会发生变化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35487044/

相关文章:

python - 使用 Python 执行 bcp 将查询从远程服务器导出到本地驱动器

python - Pandas groupby 聚合/将特定函数应用于特定列(np.sum、sum)

python - 在python中将一些数组合并为单个数组/列表

python - 列表元组 - SETOF 记录的 Python/PostgreSQL 返回类型

python - 如何在 Jupyter Notebook 或 JupyterLab 中使用破折号?

python - Wagtail + Django 问题 - 页面重定向到 wagtail,尽管 url 不是 wagtail 页面

python - Numpy 在二维数组行中查找一维数组元素

python - 调用 list() 清空我的可迭代对象?

python - 将类型对象(类,而不是实例)从 python 传递到 c++

python - 如何在小键盘上绑定(bind)按键数字?