python-使用list * n 生成多维数组和使用for循环生成多维数组的区别

0.摘要

本文主要介绍生成二维数组的方法,同时解释使用list * n 方式所存在的问题。

1.从一个问题说起

先看一段代码:

list0 = [1,2,3]
list1 = [list0] * 3
print('list1 is :',list1)
list1[0][0] = 999
print('new list1 is :',list1)

结果:

程序希望通过list * n 方式的方式生成一个初始的二维数组,并对其中部分值进行修改,从而产生我们希望得到的数组。

但是,当我们修改[0][0]位置的数值后,发现[1][0],[2][0]位置的数字也变成了999

原因是,当我们使用list * n 方式的时候,采用的是浅拷贝,list1[0],list1[1],list1[2]其实都是list0的浅拷贝。

当我们在上面程序中,加入下列代码:

print('list0 is ',list0)
print(list0 is list1[0])
print(list1[0] is list1[1])

list0的值也随之改动了,并且,通过程序判定,list0,list1[0],list[1]其实都是一个列表。

2.正确的方式:

list0 = [(i + 1) for i in range(3)]
list2 = [[(i + 1) for i in range(3)] for _ in range(3) ]
print('list2 is :',list2)
list2[0][0] = 999
print('new list2 is :',list2)

print('list0 is ',list0)
print(list0 is list2[0])
print(list2[0] is list2[1])

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值