is和 =

一般新建一个对象,内存地址是不相同的,下面的是例外。

字符串有小地址池的要求:不能有空格、没有特殊字符和字符长度小于等于20.

数字-5到256

 

a is b:a和b的内存地址相等

a == b :a和b的值相等

a = b =1,:是1的两个标签

a = 1和b = 1理论上说对象是不一样的。

>>> a =1
>>> b =1
>>> c = 2
>>> a == b     #值相等
True
>>> a == c
False
>>> a is b     #a和b指向的是一个值,内存地址相同
True
>>> a is c
False
>>> e = 365   #但是有例外
>>> f = 365
>>> e is f
False
>>> e == f
True

先要在重新声明的是:字符串、数字都是属于非容器,因此不存在拷贝一说。

按理说,365和1都是属于类原子类型,都是不能在更改,为啥会有完全不同的结果了?

这是因为对于数字来说,有一个小数据池,创建相同的数字对象,都会指向一个相同的数据池,范围在-5~~255之间,这样做也是为了节省内存。

>>> e = 365
>>> f = 365
>>> e is f
False
>>> e == f  #值虽然相等
True

>>> id(e)   #内存地址并不相同
139928493356080
>>> id(f)
139928493355696

相对于数字来说,没有空格的字符串也有小数据池。

>>> oo = 'wo shi'
>>> op = 'wo shi'
>>> id(oo)
139928493584544
>>> id(op)
139928493584656

>>> a = 'wqrqw'  #有地址池,长度在20以内都是共享内存的
>>> b = 'wqrqw'
>>> id(a)
139928493545768
>>> id(b)
139928493545768

 

>>> skt = 'k'*20      
>>> kt = 'k'*20
>>> id(skt)
139717594629728   #长度20的时候内存地址是一样的
>>> id(kt)
139717594629728


>>> edg = 'j'*21
>>> ede = 'j'*21
>>> id(edg)             #大于20的时候内存地址是不一样的
139717594629800
>>> id(ede)
139717594629872

 

posted @ 2017-10-26 20:18  明王不动心  阅读(168)  评论(0编辑  收藏  举报