首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么在Python3中,小整数缓存似乎不能与round()函数中的int对象一起工作?

在Python3中,小整数缓存是一种优化机制,它会缓存一定范围内的整数对象,以减少内存的使用和提高性能。具体而言,Python3中会缓存范围在-5到256之间的整数对象。

然而,当使用round()函数将一个浮点数四舍五入为最接近的整数时,如果该浮点数的结果是一个小整数(即在缓存范围内),则会返回一个新的整数对象,而不是直接返回缓存中的对象。这是因为round()函数的设计初衷是返回一个新的整数对象,以避免对缓存中的对象进行修改。

这种设计决策可能是为了保持整数对象的不可变性,以及避免潜在的副作用。因为缓存中的整数对象是共享的,如果直接修改缓存中的对象,可能会影响到其他引用了相同整数对象的地方,导致意想不到的结果。

虽然这种设计可能会导致一些性能上的损失,但它确保了整数对象的不可变性和一致性。如果需要将round()函数的结果与小整数缓存中的对象进行比较,可以使用is关键字来判断它们是否引用同一个对象。

总结起来,小整数缓存在Python3中是一种优化机制,但在round()函数中,为了保持整数对象的不可变性和一致性,会返回一个新的整数对象,而不是直接使用缓存中的对象。这样设计的目的是为了避免潜在的副作用,并保证代码的可靠性和一致性。

腾讯云相关产品和产品介绍链接地址:

  • 腾讯云官网:https://cloud.tencent.com/
  • 云服务器(CVM):https://cloud.tencent.com/product/cvm
  • 云数据库 MySQL 版:https://cloud.tencent.com/product/cdb_mysql
  • 人工智能平台(AI Lab):https://cloud.tencent.com/product/ailab
  • 物联网开发平台(IoT Explorer):https://cloud.tencent.com/product/iotexplorer
  • 移动应用托管(Serverless Cloud Function):https://cloud.tencent.com/product/scf
  • 对象存储(COS):https://cloud.tencent.com/product/cos
  • 区块链服务(Tencent Blockchain):https://cloud.tencent.com/product/tencentblockchain
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Python源码剖析之整数对象

utm_source=qq&utm_medium=social ❈ 《Python源码剖析》,Python版本为2.5,而在Python3,前面提到,int类型底层实现是Python2long...对于整数对象,Python直接把它们缓存整数对象池中,用于共享。那么大整数呢?肯定不可能都缓存在内存,但是说不定某些大整数某个时刻会变得十分常用,不过谁也不知道究竟是哪个数字。...关键就在于前面我们分析PyIntObject删除操作,通过int_dealloc操作,所有的PyIntBlockobjects空闲内存块都被链接在一起了。...Python3int实现 int即long 我们之前提到,Python3int底层实现就是以前Python2long类型。...之所以我们一开始介绍Python3整数实现,是因为Python3没有了通用整数对象池(至少我没有找到),不过还保留着整数对象池。

1.4K80
  • Python第一周 学习笔记(3)

    Python内置数据结构 ---- 一、数值型 ---- 1.数据类型分类: int整数 python3int就是长整型,且没有大小限制,受限于内存区域大小 int(x) 返回一个整数 float...2.数字处理函数: (1)int()、floor()、ceil()、round()、// 区别: int(): builtin内置函数 官方文档描述: class int(x=0) class int...count(value) 返回列表匹配value次数 时间复杂度O(n),因需遍历列表 len() 时间复杂度O(1) 计数器每次向list插入、删除时执行计数 因此调用len()时只打出计数器数值...,执行遍历操作 列表增加、插入元素 append(object) -> None 尾部追加,返回None 修改原有对象生成新对象 时间复杂度O(1) insert(index, object)...-> None 指定索引插入元素,返回None 修改原有对象生成新对象 时间复杂度O(n),因为插入后可能会发生后续元素在内存中进行依次后移操作 若index超界不报错: 超越上界,尾部追加 超越下界

    74510

    Python升级之路 (二) Python基本概念

    运行结果 深入理解对象 标识用于唯一标识对象,通常对应于对象计算机内存地址。...整数可以任意大 Python2int 是32位, Long类型是64位 Python3int 可以存储任意大小整数,long 被取消。...长字符串中会保留原始格式。 c = '''Fake news ! ''' print(c) # 5.空字符串和len()函数 # Python允许空字符串存在,包含任何字符且长度为0。...== 比较是两个对象内容是否相等,值是否相等 is 运算符比 == 效率高,变量和 None 进行比较时,应该使用 is 7.整数缓存问题 命令行模式下,Python仅仅对比较小整数对象进行缓存...;不在[-5,256]出现数,缓存到链表连续分配空间 8.

    1.1K20

    Python升级之路 (Lv2 ) Python基本概念

    深入理解对象 标识用于唯一标识对象,通常对应于对象计算机内存地址。...整数可以任意大 Python2int 是32位, Long类型是64位 Python3int 可以存储任意大小整数,long 被取消。...长字符串中会保留原始格式。 c = '''Fake news ! ''' print(c) # 5.空字符串和len()函数 # Python允许空字符串存在,包含任何字符且长度为0。...== 比较是两个对象内容是否相等,值是否相等 is 运算符比 == 效率高,变量和 None 进行比较时,应该使用 is 7.整数缓存问题 命令行模式下,Python仅仅对比较小整数对象进行缓存...;不在[-5,256]出现数,缓存到链表连续分配空间 8.

    1.1K20

    python取整符号_python 取整「建议收藏」

    函数,ceil函数math模块下一个函数。...,这时可以用 math 模块 modf() 方法… round(5.6)6运算取整时保留整数下界,int则是剪去小数部分,只保留前面的整数,即向零取整,round函数遵循四舍五入法则。...安装scrapycmd输入pip install scrapy安装… 概述python3,数学运算除法被分为两种,分别是“真除法”,即无论任何类型相除结果都会保留小数点,和我们实际数学运算结果一致...但如果再进一步测试,你会发现:>>> int(-103)-3>>> -10 3-4看到这里,可能有人意识到, 似乎是向下取整意思,例如 -3.33向下取整是 -4。...如果希望python3对负数采用向零取整方法计算,可以如下处理:int(4-3)-1 int(-103)-3二 取模python3 采用%表示取模运算,结果返回除法余数:21%101 3%43

    4.9K20

    pythonround函数如何使用

    比如 round(10.0/3, 2) 3.33 round(20/7) 3 第一个参数是一个浮点数,第二个参数是保留小数位数,可选,如果写的话默认保留到整数。...round(0.5) 如果我们阅读一下python文档,里面是这么写python2.7docround()最后写着,“Values are rounded to the closest...我们知道机器浮点数不一定能精确表达,因为换算成一串1和0后可能是无限位数,机器已经做出了截断处理。那么机器中保存2.675这个数字就比实际数字要那么一点点。...除非对精确度没什么要求,否则尽量避开用round()函数。近似计算我们还有其他选择: 使用math模块一些函数,比如math.ceiling(天花板除法)。...1.34 1.344 到此这篇关于pythonround函数如何使用文章就介绍到这了,更多相关pythonround函数用法总结内容请搜索ZaLou.Cn以前文章或继续浏览下面的相关文章希望大家以后多多支持

    10.7K20

    python常见内置函数

    函数分为自定义函数和内置函数 python内置函数分类: 一、强制转换 int() / str() / bool() / list() / tuple() / dict() / set() 二、输入输出...():保留几位小数,默认保留整数,还会四舍五入 v = round(1.127,2) #第二个数代表保留几位小数,默认是None print(v) # 1.13 四舍五入...(item))) print(','.join(result)) 五、 编码相关 chr():将十进制数字转换成 unicode 编码对应字符串 ord():根据字符 unicode 编码中找到其对应十进制...map(函数,可迭代对象):一起执行 循环每个元素(第二个参数),然后让每个元素执行函数(第一个参数),将每个函数执行结果保存到新列表,并返回 #示例: v1 = [11,22,33,44...map / filter(python2与python3区别九) python2:返回列表,直接创建值,可以通过索引取值 python3:返回迭代器,直接创建值,通过循环,边循环边创建 reduce

    41820

    python关于round函数坑「建议收藏」

    比如 >>> round(10.0/3, 2) 3.33 >>> round(20/7) 3 第一个参数是一个浮点数,第二个参数是保留小数位数,可选,如果写的话默认保留到整数。...1、round结果跟python版本有关 我们来看看python2和python3有什么不同: $ python Python 2.7.8 (default, Jun 18 2015, 18:54:...如果我们阅读一下python文档,里面是这么写python2.7docround()最后写着,“Values are rounded to the closest multiple of...我们知道机器浮点数不一定能精确表达,因为换算成一串1和0后可能是无限位数,机器已经做出了截断处理。那么机器中保存2.675这个数字就比实际数字要那么一点点。...除非对精确度没什么要求,否则尽量避开用round()函数。近似计算我们还有其他选择: 使用math模块一些函数,比如math.ceiling(天花板除法)。

    80510

    Python基础语法(三)

    int、float、complex、bool都是类,1\3.14\2+3j都对象(即实例)。这也符合Python一切皆对象原则。...int: Python3int就是长整型,理论上支持无限大数字,但是受限于内存区域大小。 float: 由整数部分和小数部分组成。支持十进制和科学计数法表示。只有双精度型。...,为什么是四舍六入,我们平时不是四舍五入吗?...这里,是因为Python3文档规定了小数距离哪个数更近就往哪边取整,至于0.5,就向偶数取整。有关于这个函数说明可以点击这里查看。建议尽量避免使用这个函数,免得出问题。...1.4.2 最大值与最小值 一组数,我们可能需要取最大值或者最小值,使用max()函数可以取最大值,min()函数取最小值。

    89910

    @陈同学专属Python教程之常见数据结构

    扫码_搜索联合传播样式-标准色版 - 副本.png 数字 转化为数字 int(x) 将x转换为一个整数。 float(x) 将x转换到一个浮点数。...# -*- coding: utf-8 -*- data = '123' print(int(data)+4) 四舍五入 #round() 方法返回浮点数 x 四舍五入值,准确说保留值将保留到离上一位更近一端...print ("round(80.264, 2) : ", round(80.264, 2)) 向上取值 ceil(x) 返回数字上入整数,如math.ceil(4.1) 返回 5 向下取值 floor...len(list) 将元组转换为列表 list(seq) 列表末尾添加新对象 list.append(obj) 重点在末尾添加 统计某个元素列表中出现次数 list.count(obj) 列表末尾一次性追加另一个序列多个值...pop(1) print ("列表现在为 : ", list1) 函数用于移除列表某个值第一个匹配项。

    1.6K10

    Python-基础02-程序与用户交互

    ---- input区别 #python3 input:用户输入任何值,都存成字符串类型 #python2 input:用户输入什么类型,就存成什么类型 raw_input:等于python3...另外,你以后在工作中会发现,一个项目多是由几个甚至几十个开发人员一起做,你要调用别人写代码,别人也要用你,如果代码不加注释,你自己都看不懂,更别说别人了,这产会挨打的。...(整型) 32位机器上,整数位数为32位,取值范围为-2**31~2**31-1,即-2147483648~2147483647 64位系统上,整数位数为64位,取值范围为-2**63~2**63...注意:Python3里不再有long类型了,全都是int >>> a= 2**64 >>> type(a) #type()是查看数据类型方法 >>> b = 2**60...,字典是无序,python2可以明显看出,但是python3有算法优化,所以看起来像是有序

    75940

    从零开始学习PYTHON3讲义(二)把Python当做计算器

    Python3还允许使用中文作为变量名,但是因为兼容性、效率、容易出错等原因,我们推荐大家使用中文变量名。 ​...就是使用print()函数: >>> print(X,Y) (26.0, 24.0) 一个大程序,通常都要把程序按照功能划分,使用很多个函数来实现,并组装到一起。...整数运算在计算机如此重要,以至于虽然同样是数学运算,整数运算和带有小数运算被大多数编程语言当做两种类型来区别对待。这样特定运算场景,速度更快,精度更高。...使用int()函数转换,比如int(3.54)结果是3,小数部分,无论多少,都会舍去。 如果希望四舍五入,要附加使用round()函数,比如int(round(3.54)),结果是4。...round()函数功能是四舍五入,但结果依然是浮点数,上例是4.0,所以还要再经过一次int()函数转换。

    1.4K20

    Python实战之数字、日期和时间高级处理

    如果你目的只是简单输出一定宽度数,你不需要使用round()函数。...大多数使用到浮点程序,没有必要也推荐这样做. >>> 2.1 + 4.2 6.300000000000001 >>> round(2.1 + 4.2,2) 6.3 >>> 执行精确浮点数运算 「...2**32 + x, 'x') 'fffffb2e' >>> 为了以不同进制转换整数字符串,简单使用带有进制int()函数即可: >>> int('4d2', 16) 1234 >>> int(...分数运算 「一个允许接受分数形式测试单位并以分数形式执行运算程序,直接使用分数可以减少手动转换为小数或浮点数工作」 fractions 模块可以被用来执行包含分数数学运算。...概率论知识,唉,没好好听课 random 模块函数不应该用在和密码学相关程序。,可以使用 ssl 模块相应函数

    2K10

    python第二周 数字类型

    数字类型 Python,数字并不是一个真正对象类型,而是一组类似类型分类。...Python数字类型完整工具包括: 整数和浮点数 复数(需要模块支持) 固定精度十进制数 有理分数 集合 布尔类型 无穷整数精度 各种数字内置函数和模块 处理数字对象工具: 表达式操作符:+、-...、*、/、//、>>、**、& 内置数学函数:pow、abs、roundint、hex、bin 公用模块:random、math 常见内置数学函数: pow(x,y,z=None) 求xy次方,或者...xy次方对z取余 abs(n) 求n绝对值 round(x,y)    返回浮点数x四舍五入值,y为精度 >>> round(3.1415926,2) 3.14 int() 将一个浮点数转变为整数...操作符 / 号python2和python3有不同含义,python2,/ 号含义是整除,没有余数,python3,会有余数。

    76310

    java笔试题大全带答案_java笔试题大全带答案(经典11题)

    (1)和(2)都会明确显式调用构造函数 ;(3)是在内存上对已有对象影印,所以不会调用构造函数 ;(4)是从文件还原类对象,也不会调用构造函数。...(1)和(2)都会明确显式调用构造函数 ;(3)是在内存上对已有对象影印,所以不会调用构造函数 ;(4)是从文件还原类对象,也不会调用构造函数。...**6.Javaint.long占用字节数分别是** **分析:** 1:“字节”是byte,“位”是bit ; 2: 1 byte = 8 bit ; char Java是2个字节。...必须与class同名,但方法不能与class同名 C. constructor一个对象被new时执行 D....因此,参数列表必须指定每个所传递对象类型及名字。想JAVA任何传递对象场合一样,这里传递实际上也是引用,并且引用类型必须正确。

    59420

    Python 进阶指南(编程轻松进阶):九、深奥 Python 怪现象

    这种行为也通过不存储重复整数来节省内存,如图 9-1 所示。 图 9-1:Python 通过对单个整数对象(左)使用多个引用来节省内存,而不是对每个引用使用单独、重复整数对象(右)。...这在逻辑上似乎是不可能。但是请记住,这三个列表推导式每一个都计算为空列表,这就是为什么它们项目都不为假,并且all()函数返回True。...布尔值是整数值 就像 Python 认为浮点值42.0等于整数值42一样,它认为布尔值True和False分别等价于1和0。 Python ,bool数据类型是int数据类型子类。...你可以www.python.org/dev/peps/pep-0285读取 PEP 285 bool数据类型历史。 顺便说一下,True和False Python3 只是关键字。...,这种令人困惑代码 Python3 是不可能,如果您试图使用关键字True或False作为变量名,这将引发语法错误。

    62140

    Python保留指定位数小数

    ()函数 其实这个方法推荐大家使用,查询资料发现里面的坑其实很多,python2和python3里面的坑还不太一样,在此简单描述一下python3对应情况。...,看着是不是很晕,感觉round(x,n)函数是否进位也没看出是啥规律 (2)round(x,n)函数,是否进位或四舍五入,取决于n位以及n+1位小数值 (3)只有当n+1位数字是5时候,容易混淆...5)如果n为0,即没有填写n时候,最终结果与上面相反,即整数部分为偶数时候,小数位5不进位,例如(round(2.5)变为2)。...(6)整数部分为奇数时候,小数位5进位。...#保留三位小数截断 python3 print(int(1.23456 * 1000) / 1000 ) (2) 使用字符串截取,截取小数点后指定位数 原文链接: python中小数点后取2位(

    1.8K10
    领券