python - 更改复制列表中的值比更改值更多
问题描述
我正在创建一个列表的副本,但是当稍后更改复制列表中的一个值时,它的变化超过了该值。
def NewField(h,c):
r = []
r2 = []
r3 = []
for i in range(c):
r2 += ["0"]
for i in range(c):
r3 += ["-"]
for i in range(h):
r += [r2]
r += [r3]
for i in range(h):
r += [r2]
return r
test_field = NewField(3,4)
def NewMan(f,p,c):
f1 = f[:]
f1[c[0]-1][c[1]-1] = p
return f1
NewMan(test_field,"8",[1,2])
我也试过 deepcopy()
解决方案
发生这种情况是因为子列表r2
都是另一个的副本。尝试这个:
def NewField(h,c):
r = []
r2 = []
r3 = []
for i in range(c):
r2 += ["0"]
for i in range(c):
r3 += ["-"]
for i in range(h):
r += [r2[:]] # added [:]
r += [r3]
for i in range(h):
r += [r2[:]] # added [:]
return r
推荐阅读
- powershell - Add-RDServer :服务器作为 RD 会话主机服务器加入部署。以下服务器未成功验证
- openssl - Scep 服务器在我的 csr 请求中报告错误的标签
- r - 我想填充一个空的向量
- mysql - 如何在mysql中插入图像并在vb中显示?
- css - Styled-components - CSS 类不适用于 SSR
- c - 如何在C中存储范围为10 ^ 100的整数?
- reactjs - (类型错误:无法读取未定义的属性“查找”)
- python - Django get() 是否在 values() 上执行对数据库的查询?
- javascript - 与 jQuery 的下拉菜单的 preventDefault 冲突
- python - 将 Django 与 sql server 数据库连接时出错