python中列表位置传递问题解决

python中列表赋值过程中原列表随新列表变化的原因及解决方式

python在利用列表处理数据时,由于是位置传递,操作不当常常会导致原数据被改变,本博客则记录了解决该问题的几种方法。
首先说明一下什么是值传递,什么是位置传递,以及案例说明。

a=1
b=a
print(a, b) #输出为 1, 1
b=3
print(a, b) #输出为 1, 3 

以上即为值传递,对于数而言,位置指向的是值,即当b=a时只是将a的值赋给了b,由于值相同,此时a,b是指向同一位置,但当b的值发生改变时,b的id也随着b值的改变而改变,而a的值和位置均不变,这里可以通过打印a,b的id进行查看,如下:

a=1
b=a
print(id(a)) #输出为 94823332457152
print(id(b)) #输出为 94823332457152
b=3
print(id(b)) #输出为 94823332457216

而列表则不一样,列表属于位置传递,列表之间存在赋值时,其本质上是赋值的两个列表指向同一位置,当指向同一位置的任意一个列表变化时,由于是根据位置进行查询,另一个列表也随之改变,例子如下:

a=[1,2,3,4,5]
b=a
print(a, b) #输出均为 [1,2,3,4,5]
b.append(6)
print(a, b) #输出均为 [1,2,3,4,5,6]

同样,我们从id上进行分析,如下:

a=[1,2,3,4,5]
b=a
print(id(a), id(b)) #输出均为 140120064416456
b.append(6)
print(id(a), id(b)) #输出仍均为 140120064416456

可见,与数的赋值不一样,当列表发生改变时,列表所指向的位置并未发生变化,而是位置上对应的值发生了变化,此时也导致指向该位置的所有列表的值均发生了变化。
但在实际的应用中,尤其是要反复调用某一初始的列表时,我们往往不希望其发生改变,此时应该怎么做呢?共包含两种形式:
方法一:list.copy()

a=[1,2,3,4,5]
b=a.copy()
b.append(6)
print(a, b) #输出分别为:[1,2,3,4,5]、[1,2,3,4,5,6]

方法二:b=a[:]

a=[1,2,3,4,5]
b=a[:]
b.append(6)
print(a, b) #输出分别为:[1,2,3,4,5]、[1,2,3,4,5,6]

以上就可以很好地解决列表在赋值过程中原列表发生变化的情况啦!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值