python 中的一些细节知识- is = == 的区别,深浅拷贝的理解

python中,一些看似相似的函数之间却有着很大的区别,比如is , = , ==

我们从例子来看

   

a =1 表示将1赋值给a

a == 1 表示判断a是否等于1

a is 1 表示a 与1是否为相同的对象。

对于b同理。

我们会发现一些比较意外的结果。对于一个整数,我们可以很容易通过多种方式来确定相等。然而对于列表对象,我们发现is的表现与其他比较操作符不同。

接下来我们从另一个角度观察。

定义了一个变量a,并将其赋值为1,将a 赋值给b。使用id方法查看他们再内存中的位置,看26的地方,他们都使用了内存中相同的位置,也就是说它们再内存中是相同的对象。

重新给a赋值为2后,会发现它在内存中有了新的位置箭头3

在列表中,我们会发现列表拥有和赋值对象相同的id值。

当我们改变这个列表的时候,发现并不能改变内存中的位置。在python中,列表表现得与字符串和整数略有不同。

我们所需要知道和理解的是,在我们将它赋值给一个新变量的时候,新变量和旧的变量仍然是内存中的相同对象。如果我们改变了一个,也改变了另一个。如果想要改变其中一个或者另外一个,或者需要创建一个新的对象作为对象的副本,需要使用copy方法。

还是举个例子来说明:

  

 

 

在左边的代码中我们可以看到,当修改了a时,b的值也发生了变化,因为他们存储在内存中想同的位置。

在右边的代码中我们使用copy()方法创建了一个新的变量c,这是第一个字典的副本。在修改了c之后,我们看到它现在保存这两个键值对。但是会发现b的值没有变化。

最后我们总结一下:如果你想要一个字典或者列表的副本,需要使用copy方法。如果你想要相同的对象,可以使用=。如果你想要知道两个对象是不是‘相等的’,可以使用==,如果你想知道他们是否是相同的对象,可以使用is

最后推荐一篇文章,使用可视化的方式来理解,http://foobarnbaz.com/2012/07/08/understanding-python-variables/

 

 

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值