Python里面正无穷和负无穷原理是什么,Python原理,print id(flo
Python里面正无穷和负无穷原理是什么,Python原理,print id(flo
print id(float('inf')), id(float('-inf'))print type(float('inf')), type(float('-inf'))print float('inf') == float('-inf')
输出
35997760 35997760<type 'float'> <type 'float'>False
id相同,为何值却不同?原理是什么?
Python的文档在id()中有这样一句话:
里面说,两个生存期不重叠的对象有可能有相同的id()值,正如你在C里面malloc()之后立刻free(),然后又分配,两次的内存极有可能是相同的。在你的print id(float('inf')), id(float('-inf'))中生存期并没有重叠,因为在id()返回了它的id之后float('inf')就因为不再被引用而被释放了,生存期结束;而后下一个float('-inf')就被Python分配了相同的id。这里要补充,这里id是否相同是实现相关的,也就是说,可能CPython会相同,而JPython未必,IronPython也未必。
当然了,等号在判断float是否相等的时候,是不关心它的id,只关心它的值。==在关心id的情况,只有在比较类的实例的时候,int, float, str, list, dict依然是判断值:
>>> class C:... pass... >>> a = C()>>> b = C()>>> a == bFalse
然而整数又是不同的状况,这时为什么呢?这时因为Python有一个small_int缓存(有多小呢,CPython 2.7的实现是规定在[-5, 256]),它将小整数缓存起来,每次引用到这个整数就从缓存里拿对象,从而避免频繁内存分配,于是就造成了这个著名的情况:
>>> a = 1>>> id(a)33739096>>> b = 1>>> id(b)33739096>>> b = 2>>> id(b)33739072>>> a += 1>>> id(a)33739072
编橙之家文章,
相关内容
- Python语言编写投票APP是否可行,python语言投票app,如何用
- 请帮忙用python方法把list元素去重,pythonlist,如何将以下
- Python爬虫库Requests模拟用户登录实现方法,pythonrequest
- Python文件百度云上传该怎么实现,,我写了一个文本编辑
- Python2.7使用urllib2访问https报错,python2.7urllib2,想要访问
- 求教RESTful设计实现方法的疑问,restful疑问,最近在写
- Python lambda作用范围的一点疑惑,pythonlambda,标题描述可
- Python实现函数调用新手遇到的问题,python函数调用新手
- 小白问python dict根据value取key值应该怎么写?,pythondict
- Python requests多线程抓取请求都报异常无解,pythonreques
评论关闭