【Python基础】变量、运算与内存管理全解析

一、删除变量与垃圾回收:内存管理的底层逻辑

在Python中,变量是对象的引用,而不是对象本身。当我们不再需要某个变量时,可以用del语句删除它的引用,让垃圾回收机制(GC)自动清理无引用的对象。

1. del语句:删除的是“引用”,不是“对象”

del的作用是断开变量与对象的关联,而不是直接删除对象。例如:

a = [1, 2, 3]  # 变量a引用列表对象[1,2,3]
print(a)  # 输出:[1, 2, 3]del a  # 删除a对列表的引用
# print(a)  # 报错:NameError: name 'a' is not defined

此时,列表对象[1,2,3]如果没有其他变量引用它,会被GC标记为“可回收”,随后释放内存。

2. 垃圾回收机制:如何清理无引用对象?

Python的GC主要依赖引用计数(Reference Counting)和分代回收(Generational Garbage Collection):

  • 引用计数:每个对象有一个计数器,记录当前有多少个变量引用它。当计数器变为0时,对象立即被回收。
    import sys
    a = [1, 2, 3]
    print(sys.getrefcount(a))  # 输出:2(getrefcount本身会增加一次引用)
    b = a  # b引用同一个对象,计数器+1
    print(sys.getrefcount(a))  # 输出:3
    del b  # 计数器-1
    print(sys.getrefcount(a))  # 输出:2
    del a  # 计数器变为0,对象被回收
    
  • 分代回收:解决循环引用问题(比如两个对象互相引用)。例如:
    class Node:def __init__(self):self.next = Nonea = Node()
    b = Node()
    a.next = b  # a引用b
    b.next = a  # b引用a(循环引用)del a, b  # 此时a、b的引用计数为1,但无外部引用,分代回收会清理它们
    

二、常量:Python中的“伪常量”约定

Python没有真正的常量(无法定义不可修改的变量),但我们可以通过命名规范约定常量:全大写字母+下划线。例如:

MAX_SCORE = 100  # 考试满分(约定为常量)
PI = 3.1415926   # 圆周率(约定为常量)

注意:虽然可以修改这些变量(比如MAX_SCORE = 90),但不推荐——这会破坏程序的可读性和稳定性。

三、赋值的艺术:简化代码的小技巧

Python的赋值语法非常灵活,掌握以下技巧能大幅简化代码:

1. 链式赋值:一次给多个变量赋同一值
x = y = z = 0  # x、y、z都引用0这个整型对象
print(x, y, z)  # 输出:0 0 0

说明:链式赋值本质是将同一个对象的引用赋给多个变量,修改其中一个变量不会影响其他(比如x = 10,y仍为0)。

2. 系列解包赋值:快速分配多个变量

将可迭代对象(列表、元组、字符串等)的元素解包给多个变量:

# 基本用法
a, b, c = 10, 20, 30  # 元组解包
print(a, b, c)  # 输出:10 20 30# 列表解包
d, e = [40, 50]
print(d, e)  # 输出:40 50# 字符串解包(字符串是可迭代对象)
f, g = "ab"
print(f, g)  # 输出:a b
3. 变量互换:无需临时变量

通过解包赋值,可以快速交换两个变量的值

a, b = 1, 2
print(a, b)  # 输出:1 2
a, b = b, a  # 右边是元组(b,a),解包后赋值给a、b
print(a, b)  # 输出:2 1
4. 星号表达式:处理可变长度的可迭代对象

*符号接收可变数量的元素,返回列表:

# 取第一个元素,剩下的作为列表
first, *rest = [1, 2, 3, 4, 5]
print(first)  # 输出:1
print(rest)   # 输出:[2, 3, 4, 5]# 取中间元素
*middle, last = [1, 2, 3, 4, 5]
print(middle)  # 输出:[1, 2, 3, 4]
print(last)    # 输出:5# 取两边元素,中间作为列表
first, *middle, last = [1, 2, 3, 4, 5]
print(first)   # 输出:1
print(middle)  # 输出:[2, 3, 4]
print(last)    # 输出:5

四、变量与对象类型:Python的“动态类型”本质

Python是动态类型语言,其核心特点是:

  • 变量无类型:变量只是“引用”,不绑定具体类型。
  • 对象有类型:变量的类型由它引用的对象决定。

例如:

a = 10  # a引用整型对象,type(a)→int
print(type(a))  # 输出:<class 'int'>a = "hello"  # a引用字符串对象,type(a)→str
print(type(a))  # 输出:<class 'str'>a = [1, 2, 3]  # a引用列表对象,type(a)→list
print(type(a))  # 输出:<class 'list'>

总结:变量是“容器”,装的是对象的地址;对象是“内容”,有固定的类型和值。

五、数字与基本运算符:Python的算术基础

Python支持整数(int)和浮点数(float)两种基本数字类型,提供了丰富的运算操作。

1. 数字类型说明
  • 整数:任意大小的整数(比如50-1000)。
  • 浮点数:带小数点的数字(比如3.1410.0),或科学计数法(比如1.23e2→123.0)。
2. 基本运算符(重点总结)

以下是Python中常用的数字运算符,结合示例说明:

运算符说明示例结果
+加法3 + 25
-减法30 - 525
*乘法3 * 618
/浮点除法(结果为浮点数)8 / 24.0
//整数除法(向下取整)7 // 23
%模运算(取余)7 % 43
**幂运算2 ** 38

关键说明

  • ///的区别/返回浮点数(即使整除),//返回整数(向下取整)。例如:
    print(8 / 2)  # 输出:4.0(浮点除法)
    print(7 // 2)  # 输出:3(整数除法,向下取整)
    print(-7 // 2) # 输出:-4(向下取整到更小的整数)
    
  • %的符号规则:模运算的结果符号与除数一致。例如:
    print(7 % 4)   # 输出:3(7 = 4*1 + 3)
    print(7 % -4)  # 输出:-1(7 = (-4)*(-2) + (-1))
    
3. divmod()函数:同时获取商和余数

divmod(a, b)接受两个参数,返回一个元组, 余数),其中商由a // b计算,余数由a % b计算。例如:

# 计算7除以2的商和余数
quotient, remainder = divmod(7, 2)
print(quotient)  # 输出:3
print(remainder) # 输出:1# 计算100除以3的商和余数
q, r = divmod(100, 3)
print(q)  # 输出:33
print(r)  # 输出:1

优势:比分开计算商和余数更高效(只需一次运算)。

六、总结:掌握基础,事半功倍

本文覆盖了Python的核心基础知识点:

  • 内存管理del删除引用,GC自动清理无引用对象。
  • 常量约定:全大写命名,逻辑上保持不变。
  • 赋值技巧:链式赋值、解包赋值、变量互换,简化代码。
  • 类型本质:变量是引用,对象有类型,动态类型语言的特点。
  • 数字运算:基本运算符的用法,divmod()函数的高效性。

这些知识点是Python编程的基石,建议多写代码实践(比如用解包赋值交换变量,用divmod()优化除法运算),体会Python的简洁与高效。

如果本文对你有帮助,欢迎点赞、收藏,评论区留言交流~ 😊

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/88715.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/88715.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Spring Boot + Javacv-platform:解锁音视频处理的多元场景

Spring Boot Javacv-platform&#xff1a;解锁音视频处理的多元场景 一、引言 在当今数字化时代&#xff0c;音视频处理已成为众多应用场景中不可或缺的一部分&#xff0c;从在线教育、视频会议到短视频平台、智能安防等&#xff0c;音视频数据的处理与分析需求日益增长。Java…

k8s 的基本原理、架构图、使用步骤和注意事项

Kubernetes&#xff08;k8s&#xff09;是一个开源的容器编排平台&#xff0c;用于自动化部署、扩展和管理容器化应用。以下是其基本原理、使用步骤和注意事项的总结&#xff1a;一、k8s 基本原理核心架构 Master 节点&#xff1a;控制集群的核心组件&#xff0c;包括&#xff…

Qt 多线程编程:单例任务队列的设计与实现

引言&#xff1a; 在现代应用程序开发中&#xff0c;多线程编程已成为处理异步任务的标配。对于 GUI 应用而言&#xff0c;保持主线程的响应性尤为重要。本文将详细介绍一个基于 Qt 的单例任务队列实现方案&#xff0c;它通过线程池和单例模式&#xff0c;优雅地解决了后台任务…

OpenEuler操作系统中检测插入的USB设备并自动挂载

OpenEuler操作系统中检测插入的USB设备并自动挂载 项目需求&#xff1a;工控机上openeuler操作系统是无界面版本的&#xff0c;在工控机上连接了激光雷达&#xff0c;当激光雷达采集完数据&#xff0c;我们要将采集数据导入u盘&#xff0c;故需要在工控机上插入u盘&#xff0c;…

《Spring 中上下文传递的那些事儿》Part 11:上下文传递最佳实践总结与架构演进方向

&#x1f4dd; Part 11&#xff1a;上下文传递最佳实践总结与架构演进方向 经过前面几篇文章的深入探讨&#xff0c;我们已经系统性地学习了 Spring 应用中上下文传递的各种技术原理、常见问题以及解决方案。从 Web 请求上下文到异步任务、从多租户隔离到日志脱敏&#xff0c;…

使用云虚拟机搭建hadoop集群环境

使用云虚拟机搭建hadoop集群环境 安装jdk17 配置docker网络 docker network create --subnet172.18.0.0/16 hadoop 172.18.0.0&#xff1a;这是子网的网络地址&#xff0c;也就是这个网络的起始地址。/16&#xff1a;这是子网掩码&#xff08;Network Mask&#xff09;&#x…

【机器学习】吴恩达机器学习课程代码作业-Python版本

吴恩达老师的机器学习课程作业是MATLAB版本&#xff08;Octave&#xff09;的&#xff0c;现在有点过时了&#xff0c;我参考了几位大牛的代码&#xff0c;将作业改成了Python3.6版本&#xff0c;并做了中文注释&#xff0c;推荐使用Jupyter notebook。Python作业使用了原版数据…

2025年人工智能、虚拟现实与交互设计国际学术会议

重要信息 官网&#xff1a;www.aivrid.com 时间&#xff1a;2025年10月17-19日 地点&#xff1a;中国-东莞 部分介绍 征稿主题 包括但不限于&#xff1a; 生物特征 模式识别 机器视觉 专家系统 深度学习 智能搜索 自动编程 智能控制 智能机器…

SHA-256算法流程分析与详解——Github工程结合示例和动画演示

近日笔者在学习区块链的相关知识&#xff0c;接触到SHA-256算法&#xff0c;这里做一个知识梳理和总结。 强烈推荐大家自行去学习下面链接github上的工程&#xff0c;作者的动画演示和解释做的非常出色&#xff0c;逻辑非常清晰&#xff0c;B站搬运的对应的油管的讲解视频也放…

CSPNet: A New Backbone that can Enhance Learning Capability of CNN (CSP模块)

3. Method 方法 3.1 Cross Stage Partial Network 跨阶段局部网络 3.1.1 Cross Stage Partial Network 跨阶段局部网络 3.1.1.1 ResNet 和 DenseNet 的优缺点主流的卷积神经网络&#xff08;CNN&#xff09;架构&#xff0c;如ResNet [8]、ResNeXt [37]、DenseNet [11]&#x…

前端学习4:小白入门注册表单的制作(包括详细思考CSS、JS实现过程)

这篇我们来做一个简单表单&#xff0c;即常见的注册页面吧~学习完这篇我们将学习到Input、label、CSS伪类、CSS入门、更多的JS操作等。。一、首先明确需求&#xff1a;直接模仿常见的注册页面&#xff0c;包括&#xff1a;用户名、Email、性别&#xff08;单选按钮男/女&#x…

强化学习 (RL) 新突破:超越游戏,走向复杂现实决策

强化学习 (RL) 新突破&#xff1a;超越游戏&#xff0c;走向复杂现实决策 强化学习&#xff08;Reinforcement Learning&#xff0c; RL&#xff09;作为人工智能的核心范式之一&#xff0c;历经数十年的发展&#xff0c;正迎来一场深刻的范式转移。曾以战胜人类顶尖选手的Alph…

2025年6-7月AI领域关键进展:从药物研发到全球监管--AI深度融入产业与社会

2025年6月至7月&#xff0c;人工智能领域继续以惊人速度发展&#xff0c;在技术突破、行业应用、政策法规、企业战略及学术研究等方面取得了一系列重要里程碑。以下为关键动态&#xff1a;一、技术突破&#xff1a; AI向生命科学和认知科学纵深挺进DeepMind启动AI设计药物人体试…

【TOOL】ubuntu升级cmake版本

文章目录一、下载cmake脚本二、安装一、下载cmake脚本 在编译新工程时遇到cmake版本过低的情况&#xff0c;到 cmake官网 下载指定cmake安装脚本&#xff1a; 若需下载指定版本&#xff0c;见上图右上角蓝框。 二、安装 # 赋予可执行权限 sudo chmod x cmake-3.31.8-linux-x8…

GMSK调制解调系统的matlab性能仿真,对比维特比解调,1bit差分解调,2bit差分解调

目录 1.前言 2.算法运行效果图预览 3.算法运行软件版本 4.部分核心程序 5.算法仿真参数 6.算法理论概述 7.参考文献 8.算法完整程序工程 1.前言 GMSK(Gaussian Minimum Shift Keying&#xff0c;高斯最小频移键控)是一种连续相位调制技术&#xff0c;基于MSK调制改进而…

SQL138 连续两次作答试卷的最大时间窗

SQL138 连续两次作答试卷的最大时间窗 问题分析 找出2021年至少有两天作答的用户计算每个用户连续两次作答的最大时间窗基于历史数据预测在这个时间窗内平均会做多少套试卷 版本1 with-- 功能​&#xff1a;筛选2021年至少有两天作答的用户及其作答记录-- 子查询找出2021年…

TensorFlow2 study notes[2]

文章目录tf.autodiff.ForwardAccumulatorreferencestf.autodiff.ForwardAccumulator the function can be used to achieve the Computation of Jacobian-vector products with forward-mode autodiff. primals is variables need to watch.tangents is direction vector. …

稳定币将成为新时代的重要金融工具

在数字经济加速渗透的今天,加密货币作为一种新型价值载体,正深刻改变着全球金融的运作逻辑。其中,稳定币与非稳定币构成了加密货币生态的两大支柱,二者在设计逻辑、应用场景和市场表现上呈现出显著差异。 稳定币锚定法定货币 稳定币是一类以法定货币、大宗商品或其他资产…

Constants

本节是《Solidity by Example》的中文翻译与深入讲解&#xff0c;专为零基础或刚接触区块链开发的小白朋友打造。我们将通过“示例 解说 提示”的方式&#xff0c;带你逐步理解每一段 Solidity 代码的实际用途与背后的逻辑。 Solidity 是以太坊等智能合约平台使用的主要编程语…

五镜头倾斜摄影相机的技术优势与应用原理

倾斜摄影技术作为三维实景建模的核心手段&#xff0c;其硬件设计直接影响数据采集效率与模型质量。在众多镜头配置方案中&#xff0c;五镜头结构&#xff08;下视前、后、左、右四个倾斜视角&#xff09;已成为行业主流选择。这一设计并非偶然&#xff0c;而是基于严苛的技术需…