Day 5

References:

回顾

image
image

今日内容

image
image
image
image
image

垃圾回收机制(Garbage Collection)

列表在内存中的存储方式

PS: 看本文顶部的引用文章查看具体的概念描述

PPS: 或者看python分类中关于python reference的文章

  1. 引用计数
  • 直接引用
  • 间接引用

image

image

image
如下图:
image

PS: 详细看python分类中关于How python list works这篇文章

  1. 标记清除

循环引用导致内存泄漏

内存管理管理的是堆区,当堆区的内容被回收,栈区的变量没有对应关系之后自然会被清除

image

image

image

  1. 分代回收

针对引用计数扫描效率的问题,启用了分代回收机制,优化垃圾扫描频率

image

内存泄露

在Python中,内存泄漏是指程序在运行过程中,未能释放不再使用的内存,导致占用的内存持续增长,最终可能耗尽系统可用内存,影响程序性能或导致程序崩溃。尽管Python具有自动垃圾回收机制,但在某些特定情况下,仍可能出现内存泄漏。

Python中的内存管理

Python使用引用计数和周期检测算法来管理内存。大多数情况下,当一个对象不再被引用时,其引用计数降为零,Python的垃圾回收器会自动释放该对象占用的内存。但是,如果存在循环引用或其他特殊情况,垃圾回收器可能无法立即检测到对象不再需要,从而导致内存泄漏。

出现内存泄漏的情况

  1. 循环引用: 当对象之间形成循环引用,且这些对象不再被外部引用时,Python的引用计数机制可能不会释放这些对象,除非垃圾回收器运行周期性清理。在Python 3.4及更高版本中,垃圾回收器更加积极,但循环引用仍然可能成为问题。

  2. 全局变量: 全局变量或模块级别的变量如果持续累积数据,而没有适当的清理机制,也可能导致内存泄漏。例如,不断向全局列表添加元素而不移除旧元素。

  3. C扩展模块: 如果使用C编写的扩展模块,而该模块的内存管理不当,可能会导致内存泄漏。这是因为C扩展不受Python的自动内存管理约束。

  4. 弱引用: 如果对象只有弱引用,且这些弱引用没有被适当地清理,也可能会导致对象不被垃圾回收。

  5. 长时间运行的任务: 对于长时间运行的Python服务或守护进程,即使很小的内存泄漏也可能随时间积累成大问题。

  6. 第三方库: 第三方库可能存在内存管理问题,特别是那些处理大量数据或使用底层API的库。

如何检测和解决内存泄漏

  1. 使用工具: 可以使用像objgraph、heapy、tracemalloc等工具来检测Python中的内存泄漏。

  2. 定期重启服务: 对于长时间运行的服务,定期重启可以作为一种临时的解决办法,但这并不是根本的解决方案。

  3. 代码审查: 定期进行代码审查,寻找可能导致内存泄漏的模式,如不当的引用管理和不必要的数据累积。

  4. 优化数据结构使用: 使用适当的数据结构和算法,避免不必要的数据复制和累积。

  5. 使用弱引用: 在适当的情况下使用弱引用,避免不必要的强引用导致的对象生存期过长。

  6. 垃圾回收调优: 虽然通常不需要,但在特定情况下,可以手动触发垃圾回收或调整垃圾回收策略。

理解内存泄漏的原因和采取预防措施对于编写高效、健壮的Python应用程序至关重要。在开发过程中,持续监控和测试程序的内存使用情况可以帮助及时发现和解决问题。

用户交互之接收用户输入

image
image
image

为什么python 3.0的input比python 2.0的input更好?

因为python 2.0的input要求用户输入“正确”的数据类型,但是指望所有的用户都认识python中数据类型的语法是不现实的。所以在python 3.0中,无论用户输入的是什么,都将被python解释器识别为字符串类型,至于输入的内容需要被看作什么类型,则由开发者决定

image

如上图。在python 2.0中,如果输错了list类型的格式,python解释器会报错

格式化输出

方式一

image

方式二

2.6版本引用format方法处理字符串的格式化输出,其兼容性好

image

方式三

image

基本运算符之算数运算与比较运算

image
image

基本运算符之赋值运算符

image

  • 链式赋值

image

  • 交叉赋值

image

image

  • 解压赋值

image

image

posted @ 2024-06-06 10:44  stitchCat  阅读(5)  评论(0)    收藏  举报