python a is b_请问大佬,python中a=[1,2,3],b=a[:],b is a却返回false这是为什么呀?...

这个问题涉及到深拷贝和浅拷贝,同时也涉及到电脑中赋值操作的意义

先说赋值:一般的赋值是赋值地址的链接,内部的操作是这样的:

a=3: 计算机会在内存中创建一个数字3,这个数字3内存的地址赋值给a,也就是变量a是通过地址指向数字3的

b=a:这个赋值操作就是把a的地址赋值给b,也就是b的地址也指向了内存中的数字3

所以a、b两个变量指向的内存地址都是一样的,都是数字3

如果a=4,那a的地址就不再是指向3,而是4了

所以赋值操作,是地址的赋值,而不是内存数据的重新拷贝

这个也不是绝对的,所以总会有例外,这就是深拷贝,就是把内存中的数据重新拷贝一份,把新数据的地址赋值给变量

所以问题中的b=a[:],就是这样的情况,就是深拷贝,这也是在列表运用中的一个特性

如果你仅仅是赋值链接,通过b=a就可以,如果你想把内存数据重新拷贝一份,就是b=a[:]

你会有一个疑问,那就是既然都可以让b获得同样的数据,为什么还要这么繁琐用两种不同的方式?

这里会存在一个情况,b=a这样的赋值,会存在一个问题,就是如果你修改a内存的数据,b指向的数据就会跟着更新,

但是如果你只是想修改a,不想修改b,这个时候就是可以通过b=a[:]来实现,这个就是它存在的意义

所以明白了上面所说的计算机内部运作的逻辑,就很容易理解通过is判断,为什么两者是不一样的了

is判断的不是两者的内存数据内容,而是两者的内存地址是否一样

b=a[:],使得b有了新的内存数据地址,所以a、b两者虽然数字都是一样的,但是内存地址是不一样的,所以结果False

以上的解答说明,希望能帮你解惑,祝学习愉快

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值