Python list的一些问题

本文讨论了在Python中使用列表创建三维数组时遇到的问题。作者在尝试修改三维列表的一个元素时,意外地改变了整个列的值。问题出在列表引用导致的深层次拷贝错误。解决方案是使用切片或numpy库来实现独立的三维数组单元修改。
摘要由CSDN通过智能技术生成

起因是做题,洛谷的 P5729 【深基5.例7】工艺品制作 。想法中用到了三维数组,一下没想到numpy,就用的list。众所周知,list可以嵌套,形成二维list,所以我想用list做三维list。但测试后发现不对。

遇到问题的代码:

w = 3
x = 3
h = 3
m = []
y = []
a = []
for k in range(h):
    m.append(1)
for j in range(x):
    y.append(m)
for i in range(w):
    a.append(y)
    
# 此之前为创建了一个我想象中的三维list、

# a[1][1][1] 的值是 1 ,我想改他为2, 本想改后应该是全部为1,他单一一个为2。结果改完之后发现整列都成了2
print('a = {}'.format(a))
print('a[1] ={}'.format(a[1]))
print('a[1][1] = {}'.format(a[1][1]))
print('a[1][1][1] = {}'.format(a[1][1][1]))
a[1][1][1] = 2
print('a{}'.format(a))

输出:

a = [[[1, 1, 1], [1, 1, 1], [1, 1, 1]], [[1, 1, 1], [1, 1, 1], [1, 1, 1]], [[1, 1, 1], [1, 1, 1], [1, 1, 1]]]
a[1] =[[1, 1, 1], [1, 1, 1], [1, 1, 1]]
a[1][1] = [1, 1, 1]
a[1][1][1] = 1
#在此处进行了修改,a[1][1][1] = 2
a[[[1, 2, 1], [1, 2, 1], [1, 2, 1]], [[1, 2, 1], [1, 2, 1], [1, 2, 1]], [[1, 2, 1], [1, 2, 1], [1, 2, 1]]]

问题描述:本认为修改后只改一个值,结果改了一大堆。很懵逼 为什么。请教一下各位大神,感谢

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值