栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

python == 和 is

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

python == 和 is

==一般是值的比较,is则是地址的比较

>>> a = [1, 2, 3]
>>> b = [1, 2, 3]
>>> a == b
True
>>> a is b
False

在上面这个例子中a和b的值是一样的,但他们指向的是不同的内存

>>> a = 'a'
>>> b = 'b'
>>> a == b
True
>>> a is b
True

我们会发现,列表值一样但内存地址不一样,但字符串两个变量值一样,地址居然也一样。这是什么原因呢?

首先我们知道字符串是不可更改的,这是因为字符串其实是常量,每一个字符串在内存中的地址都是唯一的。

当a变量申请一个’a’字符串的时候,会先去常量内存区找’a’字符串,没有就申请一块内存存’a’,再把’a’的地址返给变量a。

当b变量申请一个’a’字符串时,这个时候在常量内存区找到了’a’,就直接把地址返给变量b了,没有再取申请内存。

所以a, b变量其实是同一个对象

这个时候你可能会问了,那a,b都是同一个对象了,那我a变量值改变的时候,b是不是应该也改变

>>> a = 'a'
>>> b = 'b'
>>> a = 'c'
>>> a is b
False

其实因为字符串时常量不可改变,所以当a=‘c’时,并不是把a原来所指向的字符串’a’的内存把值改为’c’,而是a把指向地址改变指向到了常量’c’字符串的内存上去了,所以b的指向没有变,b也不会跟着a的值改变而改变了。

这也是为什么我们不能修改字符串中的某个字符,而要把字符串转为列表来修改。

不仅字符串,整型, bool型,None型也都是这样的常量

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/929181.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号