为了账号安全,请及时绑定邮箱和手机立即绑定

python中具有相同功能的数组的问题

python中具有相同功能的数组的问题

Helenr 2021-07-16 19:15:18
所以我遇到了一个非常奇怪的场景,我简化了代码,但遇到了同样的问题。def write_to_bf_of_lpr(bf_source, bf_destination, lpr_index, start, length):    for x in range(length):        bf_destination[lpr_index][start + x] = bf_source[start + x]source = ['a','b','c','d','e']destination = [[0]*5]*3dets2=[[0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0]]for x in range(1):    write_to_bf_of_lpr(bf_source=source,bf_destination=dets2,lpr_index=x,start=1,length=2)for x in range(1):    write_to_bf_of_lpr(bf_source=source,bf_destination=destination,lpr_index=x,start=1,length=2)这段代码很容易理解,我希望做的只是每次(或迭代)更改特定的数组。现在:当我在支持版本中编写时:destination = [[0]*5]*3 它正在更改 SINGLE 迭代中的所有数组。当我用 LONG 版本(这不是可取的)编写时,我得到了正确的版本。你可以看到这dest2是正确的,而destination错误的答案。有趣的是,我只是简单地从简短版本中复制了值……结果却有所不同……是 Pycharm 错误、python 还是我遗漏了什么?请看输出截图
查看完整描述

1 回答

?
拉丁的传说

TA贡献1789条经验 获得超8个赞

那是因为当你按照你的方式定义一个数组时,你基本上是在创建引用的副本,[0]*5这意味着如果你改变一个,它们都会改变。您可以在使用 numpy 时做您想做的事情,这样当您更改一个索引时,只有该索引会更改。


import numpy as np


destination = np.zeros((3, 5))

您也可以在没有 numpy 的情况下执行以下操作:


destination = [[0] * 5 for _ in range(3)]


查看完整回答
反对 回复 2021-07-21
  • 1 回答
  • 0 关注
  • 191 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信