Python中“==”和“is”的区别

  • is比较的是内存地址(可以用id()查看内存地址)
  • ==比较值

    先在shell中输入以下代码:
    image.png
image.png

在shell中处理含有非单词字符的字符串的时候会临时分配多个内存

单词字符:正则中的\w,包括大小写字母、数字、下划线这三类。

可以试试123 、x!y!z 、 x y z以及其他任何组合

但是在shell里是一行一行执行,所以同一行的话两个字符串的内存地址是一样的。
image.png

但是将代码放入可执行文件中执行就又不同了:
将以下代码写入文件test.py中,执行文件

a = 'shi yan lou'
b = 'shi yan lou'
print(a is b)

执行结果:
image.png
  • 在shell中单行执行时是临时分配的内存地址,而在程序中,字符串是不可变类型,只有一个地址。

注意!!!以上只是说了字符串等不可变对象
list、dict等可变类型无论在shell里还是在代码中id都是不一样的。

有人可能会问tuple,tuple虽然是不可变类型,但是具有可变性。意思是虽然tuple本身不可变,但tuple中元素可以是list等可变的类型!

有意思的一点是None这个值,任何时候任何地点无论什么情况它都风雨无阻的id(None) == 10061536。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 官网 中文版本 好的网站 Content-type: text/htmlBASH Section: User ...
    不排版阅读 9,955评论 0 5
  • 〇、前言 本文共108张图,流量党请慎重! 历时1个半月,我把自己学习Python基础知识的框架详细梳理了一遍。 ...
    Raxxie阅读 19,282评论 17 410
  • 543
    红昔昔阅读 1,209评论 0 1
  • 第一,“抢单”,我们在门店会看到在店铺没有人的时候,员工基本是窝在柜台内的,而超级买手基本会站在门口,不管在哪个位...
    天蓝槑Ln阅读 3,308评论 0 0