我想在5x5的字典矩阵中更改特定值,这是我的代码:
optimization: { runtimeChunk: 'single', splitChunks: {
chunks: 'all',
maxInitialRequests: infinity,
cacheGroups: {
vendor: {
test: /[\\/]node_modules[\\/]/,
vendorname(v) {
var name = v.context.match(/[\\/]node_modules[\\/](.*?)([\\/]|$)/)[1];
return `npm.${name.replace('@', '_')}`;
},
},
},
它不会更改一个值,而是会更改所有值:
matrix = [[{"value": 1}]*5]*5
matrix[0][0]["value"] = 4
print(matrix)
代码不应该只更改一个值,就像这样:
[[{'value': 4}, {'value': 4}, {'value': 4}, {'value': 4}, {'value': 4}], [{'value': 4}, {'value': 4}, {'value': 4}, {'value': 4}, {'value': 4}], [{'value': 4}, {'value': 4}, {'value': 4}, {'value': 4}, {'value': 4}], [{'value': 4}, {'value': 4}, {'value': 4}, {'value': 4}, {'value': 4}], [{'value': 4}, {'value': 4}, {'value': 4}, {'value': 4}, {'value': 4}]]
要获得此输出,我必须在代码中进行哪些更改?
答案 0 :(得分:1)
Multiplying由n组成的列表仅将其内容重复n次。因此,
[{"value": 1}]*5
将创建一个新列表,其中包含对同一字典{"value": 1}
的5个引用。由于所有列表项都引用同一对象,因此更新其中任何一个都会影响其他对象。
相反,使用列表推导来创建不同的对象:
matrix = [[{"value": 1} for _ in range(5)] for _ in range(5)]
matrix[0][0]["value"] = 4
print(matrix)