第三章内建对象(2):浮点对象----面试题讲解

JavaScript进阶(二十七):JavaScript 浮点数精度计算_js 浮点数子算 其实前端开发的知识点就那么多,面试问来问去还是那么点东西。所以面试没有其他的诀窍,只看你对这些知识点准备的充分程度。so,出去面试时先看看自己复习到了哪个阶段就好。这里再分享一个复习的路线:(以下体系的复习资料是我从各路大佬收集整理好的)《前端开发四大模块核心知识笔记》最后,说个题外话,我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】 阅读详情

例题一:

以下例子中, area 计算过程中有临时对象创建吗?为什么?
>>> pi = 3.14
>>> r = 2
>>> area = pi * r ** 2
Python 如何优化临时对象创建效率?
解答:(看过上面一节讲的内容。其实这个问题的答案就已经了然于心了)

(第一问)会有临时对象创建。 这个语句首先计算半径 r 的平方,中间结果由一个临时对象来保存,假设是 t ; 然后计算圆周率 pi 与 t 的乘积,得到最终结果并赋值给变量 area ; 最后,销毁临时对象 t 。
(第二问)为了提高浮点对象创建效率, Python 引入了 空闲对象缓存池,浮点对象销毁后, Python 并不急于回收内存,而是将对象放入一个 空闲链表 。 后续需要创建浮点对象时,先到空闲链表中取,省去分配内存的开销。

解析:答案其实已经说得很清晰了,但是并没有提到C语言实现的细节。 在C语言底层实现,空闲对象缓存池 是一个 空闲链表,(1)free_list 变量,指向空闲链表 头节点 的指针;(2)numfree 变量,维护空闲链表 当前长度 ;(3)PyFloat_MAXFREELIST 宏,限制空闲链表的 最大长度 ,避免占用过多内存(最大长度源码里是 100),(4)ob_type字段 作为 next指针用

创建对象(两种方式)最终调用的都是
(1)PyFloat_FromDouble 函数通过浮点值创建浮点对象;(2)PyFloat_FromString 函数通过字符串对象创建浮点对象;
而销毁对象,实际上是调用 _Py_Dealloc 宏调用类型对象 PyFloat_Type 中的 tp_dealloc 函数指针: 实现将 对象放入 缓存池中。

另外关于空闲对象缓存池的细节,就自行参看上节。


例题二

以下例子中,变量 e 的 id 值为何与已销毁的变量 pi 相同?
>>> pi = 3.14
>>> id(pi)
4565221808
>>> del pi
>>> e = 2.71
>>> id(e)
4565221808

答案:
Python 为了优化浮点对象内存分配效率,引入了 空闲对象缓存池 。 浮点对象销毁后, Python 并不急于回收对象内存,而是将对象缓存在空闲链表中,以备后用。

例子中, pi 对象销毁后, Python 先不回收对象内存,而是将其插空闲对象链表头部。 当创建浮点对象 e 时, Python 从链表头取出空闲对象来用,省去了申请内存的开销。 换句话讲, pi 对象销毁后被 e 重新利用了,因此 id 值相同也就不奇怪了。

注释:

这一题就是缓存池的原理了,再讲下:

  • 对象销毁时, Python 将其缓存在空闲链表中,以备后用。考察 float_dealloc 函数:
if (numfree >= PyFloat_MAXFREELIST)  {
    PyObject_FREE(op);
    return;
}
numfree++;
Py_TYPE(op) = (struct _typeobject *)free_list;
free_list = op;
  • 1-4 行,空闲链表长度达到限制值,调用 PyObject_FREE 回收对象内存;
  • 第 5-7 行,空闲链表长度暂未达到限制,将对象插到空闲链表头部;
  • 下次使用时,便会从链表头部取出使用。
C++ 50道面试题 虚函数是在某个基类中声明,在其派生类中被重写的成员函数。用于实现多态性,简单来说就是,对于不同的类,相同的方法可以采用不同的策略。如果析构函数不是虚函数,那么当一个派生类经由一个基类指针删除的时候,其结果是未定义的,实际实行的时候,通常是对象的派生类部分没有被销毁,而其中基类部分被销毁掉了,就产生了一种局部销毁的现象, 从而造成资源泄漏。为了消除这个问题,就必须在基类中定义virtual的析构函数,从而销毁对象时,才能完整销毁。 阅读详情

相关推荐

JavaScript进阶(二十七):JavaScript 浮点数精度计算_js 浮点数子算(1)

四轮技术面+一轮hr面结束,学习到了不少,面试也是一个学习检测自己的过程,面试前大概复习了 一周的时间,把以前的代码看了一下,字节跳动比较注重算法,面试前刷了下leetcode和剑指offer, 也刷了些在牛客网上的面经。大概就说这些了,写代码去了~祝大家都能收获大厂offer~开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】篇幅有限,仅展示部分内容+ [五、延伸阅读](#_194)+ - [5.1 IEEE 754 标准](#51_IEEE_754__195)

2401_84418883的博客 829

第三章内建对象(1):小试牛刀,解剖浮点对象 float

1

pythonstrat的博客 315

阿里巴巴面试题- - -Java体系最新面试题(2)

子类继承了父类原有的方法,但有时子类并不想原封不动的继承父类中的某个方法,所以在方法名,参数列表,返回类型(除过子类中方法的返回值是父类中方法返回值的子类时)都相同的情况下, 对方法体进行修改或重写,这就是重写。在一个类中,同名的方法如果有不同的参数列表(参数类型不同、参数个数不同甚至是参数顺序不同)则视为重载。重写 总结: 1.发生在父类与子类之间 2.方法名,参数列表,返回类型(除过子类中方法的返回类型是父类中返回类型的子类)必须相同 3.访问修饰符的限制一定要大于被重写方法的访问修饰符。......

退役复学在校大学生,目光所至,皆为华夏 2万+

python中object是什么类型_深入源码解析Python中的对象与类型

对象对象, 在C语言是如何实现的?Python中对象分为两类: 定长(int等), 非定长(list/dict等)所有对象都有一些相同的东西, 源码中定义为PyObject和PyVarObject, 两个定义都有一个共同的头部定义PyObject_HEAD(其实PyVarObject有自己的头部定义PyObject_VAR_HEAD, 但其实际上用的也是PyObject_HEAD).源码位置: I...

weixin_39790738的博客 510

SAP PI实战:5分钟搞定REST适配器同步接口配置(含Postman测试技巧)

本文详细介绍了如何在SAP PI中快速配置REST适配器同步接口,包括ESR设计、集成流配置及Postman测试技巧。通过实战步骤和关键参数设置,帮助开发者高效实现系统集成,特别适合需要实时数据交互的业务场景。

weixin_33738555的博客 485

01_MySQL下载、安装与配置(以MySQL8.0.31版本为例)

1.点击下载好的mysql安装包 进入到mysql installer界面。2.选择MySQL Servers选项 一直下拉。

4815

2. Python3源码—浮点对象

2.1. 浮点对象 浮点对象是“定长对象”。 2.1.1. Python中的创建 Python中浮点对象创建最重要的方法为PyFloat_FromDouble,如下Python语句最终会调用到PyFloat_FromDouble: a = 1.23 b = float(1.234) 2.1.2. PyFloat_FromDouble的C调用栈 词法解析,...

weixin_34315189的博客 299

TI AWR2944毫米波雷达开发板开箱:用官方Demo快速上手3D点云与热图生成

本文详细介绍了TI AWR2944毫米波雷达开发板的开箱与实战应用,包括硬件准备、软件开发环境搭建、Demo固件刷写与配置、实时可视化与数据解析等全流程指南。通过官方Demo快速上手3D点云与热图生成,帮助开发者高效掌握毫米波雷达技术在工业检测、智能交通等领域的应用。

weixin_42627853的博客 307

TypeError: ‘float‘ Object Cannot Be Interpreted as an Integer:浮点对象不能作为整数解释的完美解决方法

✍。

沉淀所学,分享所思,让热爱与成长同行。商务记录AI实战经验,助力开发者快速成长。 热爱AI,希望做出有影响力的技术成果。 技术点亮生活,分享连接价值与机会。 专注AI落地实战,陪你走好技术每一步。 2万+

Qt跨平台CAN通信实战:Vector、PCAN与周立功设备统一接口设计

本文针对Qt开发中常见的多品牌CAN设备兼容难题,提出了一套统一的跨平台CAN通信接口设计方案。通过抽象层封装,实现了对Vector、PCAN和周立功设备的统一操作,上层业务代码无需修改即可在不同硬件间切换,有效解决了驱动API差异、环境配置复杂和维护成本高等痛点,显著提升了代码复用率和开发效率。

weixin_29161785的博客 329

示波器学习(一):示波器的作用、类型和基本结构

示波器的作用、使用场景;示波器的类型和基本结构介绍

qq_41300605的博客 9139

我去,脸皮厚啊,你竟然使用==比较浮点数?

小王要去字节跳动

沉默王二 9151

一文搞懂YOLO各版本差异:v5易用、v8多任务、v10低延迟,该怎么选?

YOLOv5的“易用”是为了降低入门门槛,适合新手启蒙和旧项目维护;YOLOv8的“多任务”是为了满足工业需求,成为目前的主流版本;YOLOv10的“低延迟”是为了适配边缘计算,代表未来的发展趋势。选型的核心不是“选最新的”,而是“选最适合自己场景的”。记住选型口诀,按场景对号入座,就能避开99%的坑。希望这篇文章能帮你彻底搞懂各版本差异,选对属于自己的YOLO版本!

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1169

取double的小数部分_Javase第一部分:浮点型数据(含视频讲解)

本节视频如下知乎视频​www.zhihu.com一、浮点型数据浮点型用来保存小数的。浮点型分为两种:单精度浮点型.(float)、双精度浮点型(double)。DEMO:观察代码以上的错误是将一个高精度的数据赋值给一个低精度的变量导致的,如果直接写上一个小数则默认是double类型,如果要赋值成功需要强制类型转换。DEMO:强制类型转换如果是一个数字,则可以有两种强制类型转换方式:第一种:分别是在...

weixin_39871378的博客 980

【数字IC/FPGA】低功耗设计

低功耗设计方法功耗的类型低功耗设计方法静态低功耗技术多阈值工艺方法电源门控方法体偏置动态低功耗技术多电压域(Multi-Voltage Domain)预计算门控时钟门级优化技术毛刺的消除逻辑级优化物理级优化控制输入向量低功耗Soc系统的动态管理动态电压及频率调节技术低功耗操作系统存储器功耗控制总结 功耗的类型 CMOS电路中的功耗由两部分构成,第一部分为负载电容充放电时引起的功耗,称为动态功耗,另一部分为漏电流引起的功耗,称为静态功耗。其中动态功耗包括翻转功耗和短路功耗。翻转功耗是数字电路中信号翻转时电容充

qq_40268672的博客 3069

基于Python实现身份证信息识别

身份证是一种重要的证件,包含了个人的基本信息,如姓名、性别、出生日期、住址等。在实际应用中,有时需要对身份证进行自动化的识别,以提高工作效率和准确性。本文将介绍如何使用Python实现身份证信息的识别,通过图像预处理、OCR技术和解析算法,实现对身份证号码和其他信息的提取和解析。

商务合作 / 项目定制 / 学习交流。个人vx:lovely_wml 1万+

Java进阶(四十八)使用BigDecimal对浮点数进行精确运算_javabigdecimal转化为浮点数进行计算(2)

你认为你看错了,但结果却是是这样的。前端框架太多了,真的学不动了,别慌,其实对于前端的三大马车,Angular、React、Vue 只要把其中一种框架学明白,底层原理实现,其他两个学起来不会很吃力,这也取决于你以后就职的公司要求你会哪一个框架了,当然,会的越多越好,但是往往每个人的时间是有限的,对于自学的学生,或者即将面试找工作的人,当然要选择一门框架深挖原理。对于常用的加,减,乘,除,数值比较,BigDecimal类提供了相应的成员方法。下面是一个工具类,该工具类提供加,减,乘,除,大小比较运算。

2401_84434442的博客 985

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

JavaScript进阶(二十七):JavaScript 浮点数精度计算_js 浮点数子算(3)

这也是为什么大家都说35岁是程序员的门槛,很多人迈不过去,其实各行各业都是这样都会有个坎,公司永远都缺的高级人才,只用这样才能在大风大浪过后,依然闪耀不被公司淘汰不被社会淘汰。内容包括html,css,JavaScript,ES6,计算机网络,浏览器,工程化,模块化,Node.js,框架,数据结构,性能优化,项目等等。//说明:javascript的加法结果会有误差,在两个浮点数相加的时候会比较明显。//说明:javascript的加法结果会有误差,在两个浮点数相加的时候会比较明显。// 默认精度为10。

2401_84418883的博客 733

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

Java基础常见面试题总结

梳理Java基础相关的面试题,主要参考《Java编程思想》(第四版, Bruce Eckel 著, 陈昊鹏 译)一书,其余部分整合网络相关内容。注意,关于JVM和Java并发编程的面试题因为内容较多,单独整理。

云原生Java Web领域技术博客 1162

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

从阿里面试题解析浮点数比较与运算符重载

在编程语言中,比较运算符的底层实现涉及数据类型表示和运算规则等核心概念。以IEEE 754浮点数标准为例,其定义了±0.0的特殊比较行为:数值比较时相等但二进制表示不同,这解释了为何`i>=j && i<=j && i!=j`可能成立。该原理在并发编程、运算符重载等场景具有重要价值,如多线程环境下的竞态条件可能改变比较结果,而C++等语言的运算符重载特性可直接修改比较语义。理解这些基础机制不仅能解决类似`NaN`比较等边界问题,也是编写可靠数值计算代码的关键。本文通过阿里经典面试题,深入剖析浮点数比较在Ja

weixin_30621711的博客 716

Java高频面试题—基础常见题总结

Java常见面试题—有关基础数据类型的所有高频面试题

2301_79757798的博客 1004

Python常考面试题汇总(附答案)(持续更新)

Python3 中有六个标准的数据类型:Python3 的六个标准数据类型中:js就是典型的弱类型语言,例如在console下面模拟一下数字和字符串相加,会发现发生了类型转换。 而Python会报TypeError“当一只鸟走起来像鸭子、游泳起来像鸭子、叫起来也像鸭子,那么这只鸟就可以被称为鸭子。”鸭子类型关注的是对象的行为,而不是类型。比如file,StringIO,socket对象都支持read/write方法,再比如定义了__iter__魔术方法的对象可以用for迭代。下面用一个例子来模拟鸭子类型:

k15778864599的博客 3万+

dotNET面试题汇总系列连载(2):面向对象

马上要到2020年了,这里整理一个.NET 工程师面试题系列,希望年底或者明年金三银四跳槽的程序猿们带来一些帮助,建议收藏,如果文中答案有不准确的地方,请在评论中指出。问题目录1.通常采...

hailang2ll的专栏 166

#附答案|2024最新Python面试题之Python基础(4)

我们结合自身经验,以及搜集整理的企业面试真题整理出最新的Python 面试八股文。 只会背答案与流畅的并能结合自身思考的回答,对于面试官来说还是有很大区别的。 所以在每篇文章中会挑选一道难度高且重点的题目做详细的讲解。 希望大家不但能知其然也可以知其所以然,在面试的时候让面试官眼前一亮 无论是准备面试还是自己学习,这份面试题绝对值得你去看 大家可以关注我,再关注我,使劲关注我,不要错过每天的更新~

jtaiykt的博客 1888
上一篇: 第三章内建对象(1):小试牛刀,解剖浮点对象 float
下一篇: 完整电商项目--(二)用户注册(1):自定义用户模型类
我是py呀
博客等级 码龄8年 205粉丝 130原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值