python中is的用法_深入python里面的is用法

简介

is和is not是python中的身份运算符,身份运算符用于比较两个对象的内存地址

python里面的数据分为元素和容器

元素包含:数字(整数、浮点数、复数),字符串,布尔类型,None

容器包含:list,dict,tuple,set

小整数对象池

在python中整数范围[-5,256]会创建一个小整数对象池的东西,python为了优化速度,会把[-5,256]之间的数据提前存放在小整数对象池中,程序中只要用的[-5,256]之间的数据不会再重新创建一份,都是指向对象池中的同一份数据,除了这个区间之外的数据,每次使用时系统都会重新申请一块内存,用来存储数据

浮点数和复数没有小整数的类似机制

字符串驻留机制

python中的字符串驻留机制:字符串驻留是指相同字符串仅保存一份的做法

基本原理:系统维护interned字典,记录已被驻留的字符串对象。当字符串对象a需要驻留时,先在interned检测是否存在,若存在则指向存在的字符串对象,若不存在,则记录a到interned中,字符串只在编译时进行驻留,而非运行时

字符串长度为0和1时,默认都采用了驻留机制,字符串>1时,且只含大小写字母、数字、下划线时,才会默认驻留

用乘法得到的字符串,有以下2种情况:

情况一:乘数=1时,详见Python代码:

#*1

>>> a = 'gkjhgkhjglkjhjljk'

>>> b = 'gkjhgkhjglkjhjljk'*1

>>> id(a)

4394658384

>>> id(b)

4394658384

#*1且包含除了大小写字母、数字、下划线之外的其他字符

>>> a = '&&'

>>> b = '&&'*1

>>> id(a)

4394642824

>>> id(b)

4394642936

情况二:乘数>=2时,详见Python代码:

>>> a = 'hellohello'

>>> b = 'hello'*2

>>> id(a)

4394678320

>>> id(b)

4394678320

总长度<=20且只含大小写字母、数字、下划线时,才会驻留

总长度>20且或不止包含大小写字母、数字、下划线时,不会驻留

#整数

###小整数

>>> a = 1

>>> b = 1

>>> id(a)

4309726544

>>> id(b)

4309726544

>>> a is b

True

###大整数

>>> a = 10000

>>> b = 10000

>>> id(a)

4390241360

>>> id(b)

4390241328

>>> a is b

False

#################

#浮点数

>>> a = 1.1

>>> b = 1.1

>>> id(a)

4310614328

>>> id(b)

4310614664

>>> a is b

False

#################

#复数

>>> a = 1 + 1j

>>> b = 1 + 1j

>>> id(a)

4390241264

>>> id(b)

4390241200

#################

#字符串

>>> a = 'a'

>>> b = 'a'

>>> id(a)

4388935584

>>> id(b)

4388935584

>>> a is b

True

如果是相同容器赋值给不同变量

is判断两者关系时会返回False,因为他们的内存地址是不同的:

>>> a = [1, 2]

>>> b = [1, 2]

>>> a is b

False

>>> a = (1, 2)

>>> b = (1, 2)

>>> a is b

False

>>> a = {1:1}

>>> b = {1:1}

>>> a is b

False

>>> a = set()

>>> b = set()

>>> a is b

False

类中方法

>>> class A():

... @classmethod

... def fun1(cls):

... print('this is a classmethod!')

... @staticmethod

... def fun2():

... print('this is a staticmethod!')

...

>>> a = A()

>>> b = A()

>>> id(a.fun1)

4389571784

>>> id(b.fun1)

4389571784

>>> id(a.fun2)

4394568968

>>> id(b.fun2)

4394568968

>>> a.fun1 is b.fun1

False######注意这里⚠️

>>> a.fun2 is b.fun2

True

你可能感兴趣的:(python中is的用法)