【Python】list数组赋值
list数组对于python带来了很⼤的⽅便,在数组中存⼊数据时不⽤有那么多的顾虑,但是对list数组赋值时要特别的注意,若是赋值不当很容易会改变原数组的值。
1,对⼀维数组来说使⽤赋值符号会影响原数组
如下代码:
1li_a=[2,3,4,6,8]
2li_c=li_a
3li_c[0]=11
4li_c[1]=11
5print(li_c)
6print(li_a)
将⼀维数组li_a赋值给数组li_c,然后只更改 li_c的前两个数值。但是从最后的输出来看两个数组中前两个的数值都被改变了。
print(li_a is li_c)
使⽤is语句可得到“TRUE”的结果,可见当我们使⽤赋值符号时,li_a和 li_c其实共享⼀⽚内存地址,当对li_c改变时li_a也会改变。
2,可以通过浅拷贝的⽅式来避免原数组的影响
浅拷贝的⽅式有很多,如下代码所⽰:
1li_a=[2,3,4,6,8]
2li_c=li_a
3li_b=li_a[:]    #切⽚⽅式
4li_d=list(li_a)  #list
5print(li_a is li_c)
6print(li_a is li_b)
7print(li_a is li_d)
输出结果为:“True  False  False”
python 定义数组3,对⼆维数组赋值需要注意的问题
但是对于⼆维数组来说赋值和浅拷贝有时候确实⽆法避免对原数组的影响,如下代码所⽰:
1li_a=lq
2li_b=lq[:]
3li_c=list(lq)
4li_c[0][0]=0
5li_c[0][2]=0
6li_c[0][1]=0
7li_c[1][1]=100
8li_c[1][2]=100
9print(li_c)
10print(lq)
使⽤list形式对定义数组li_c,并以单个元素的形式改变数组li_c的某些值,结果在最后的输出结果中不仅li_c中的数组发⽣改变,lq中的数组也发⽣了改变!
1[[0, 0, 0, 8], [5, 100, 100, 23], [34, 2, 3, 9], [8, 4, 5, 6], [34, 2, 3, 9]]
2[[0, 0, 0, 8], [5, 100, 100, 23], [34, 2, 3, 9], [8, 4, 5, 6], [34, 2, 3, 9]]
若是直接是对⼆维数组中的⼀⾏进⾏改变,却不影响原数组的值:
li_c[2]=[3,3,3,3]
最后的输出结果中数组lq并没有改变:
1[[0, 0, 0, 8], [5, 100, 100, 23], [3, 3, 3, 3], [8, 4, 5, 6], [34, 2, 3, 9]]
2[[0, 0, 0, 8], [5, 100, 100, 23], [34, 2, 3, 9], [8, 4, 5, 6], [34, 2, 3, 9]]
不过对于需要单元素的改变数组的值有不影响原数组,可使⽤下⾯代码初始化数组:
1lq=[[3,4,7,8],[5,4,3,23],[34,2,3,9],[8,4,5,6],[34,2,3,9]]
2lq_hang=len(lq)
3lq_lie=len(lq[0])
4li_real=[[0]*lq_lie for i in range(lq_hang)]
5li_real[0][0]=10
6li_real[0][2]=10
7li_real[0][1]=10
8li_real[1][1]=100
9li_real[1][2]=100
10print(li_real)
11print(lq)
结果为:
1[[0, 0, 0, 0], [0, 100, 100, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]
2[[3, 4, 7, 8], [5, 4, 3, 23], [34, 2, 3, 9], [8, 4, 5, 6], [34, 2, 3, 9]]

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。