0

0

Python对象引用机制_变量赋值背后原理解析

冷漠man

冷漠man

发布时间:2026-03-08 08:03:29

|

482人浏览过

|

来源于php中文网

原创

python变量赋值不复制对象而创建引用,a=b后修改b会影响a;id()可验证引用同一性;浅拷贝共享嵌套对象,深拷贝完全独立;不可变类型重新赋值会改变引用;is判断内存地址是否相同。

python对象引用机制_变量赋值背后原理解析

当您在Python中执行变量赋值操作时,看似简单的等号“=”背后实际并未复制对象本身,而是创建了对同一内存地址的引用。以下是深入解析这一机制的关键步骤:

一、理解对象与引用的分离

Python中一切皆对象,变量名只是指向对象的标签,而非存储对象数据的容器。赋值操作仅改变标签所指向的内存地址,不触发对象内容的拷贝。

1、定义一个列表对象:a = [1, 2, 3]

2、执行赋值:b = a

立即学习Python免费学习笔记(深入)”;

3、此时a和b共享同一块内存空间,修改b将同步反映在a上。

二、验证引用关系的方法

通过内置函数id()可获取对象在内存中的唯一标识符,若两个变量id值相同,则证明它们引用同一对象。

1、打印a的内存地址:print(id(a))

2、打印b的内存地址:print(id(b))

3、比较结果:print(id(a) == id(b)) 输出True。

三、区分浅拷贝与深拷贝的影响

浅拷贝(如copy.copy())仅复制最外层容器,内部嵌套对象仍为引用;深拷贝(如copy.deepcopy())则递归复制所有层级的对象,生成完全独立的副本。

1、导入模块:import copy

2、创建嵌套列表:original = [[1, 2], [3, 4]]

3、执行浅拷贝:shallow = copy.copy(original)

4、执行深拷贝:deep = copy.deepcopy(original)

Anyword
Anyword

AI文案写作助手和文本生成器,具有可预测结果的文案 AI

下载

5、修改嵌套元素:original[0][0] = 999

6、观察shallow变化:print(shallow[0][0]) 输出999。

7、观察deep变化:print(deep[0][0]) 输出1。

四、不可变对象的特殊行为

对于int、str、tuple等不可变类型,即使多个变量引用同一对象,重新赋值操作也会使变量指向新对象,原引用关系被切断,不影响其他变量。

1、定义整数:x = 100

2、赋值给y:y = x

3、修改x:x = x + 1

4、检查y值:print(y) 仍输出100。

5、验证地址变化:print(id(x) != id(y)) 输出True。

五、使用is运算符判断引用同一性

“is”用于判断两个变量是否指向完全相同的对象(即内存地址一致),而“==”仅比较值是否相等,二者语义不同。

1、创建字符串:s1 = "hello"

2、赋值:s2 = s1

3、测试引用一致性:print(s1 is s2) 输出True。

4、创建相同内容新字符串:s3 = "hello"

5、再次测试:print(s1 is s3) 在CPython中可能为True(因字符串驻留机制),但不可依赖。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
python中print函数的用法
python中print函数的用法

python中print函数的语法是“print(value1, value2, ..., sep=' ', end=' ', file=sys.stdout, flush=False)”。本专题为大家提供print相关的文章、下载、课程内容,供大家免费下载体验。

192

2023.09.27

python print用法与作用
python print用法与作用

本专题整合了python print的用法、作用、函数功能相关内容,阅读专题下面的文章了解更多详细教程。

17

2026.02.03

java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

1561

2023.10.24

Go语言中的运算符有哪些
Go语言中的运算符有哪些

Go语言中的运算符有:1、加法运算符;2、减法运算符;3、乘法运算符;4、除法运算符;5、取余运算符;6、比较运算符;7、位运算符;8、按位与运算符;9、按位或运算符;10、按位异或运算符等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

241

2024.02.23

php三元运算符用法
php三元运算符用法

本专题整合了php三元运算符相关教程,阅读专题下面的文章了解更多详细内容。

128

2025.10.17

mysql标识符无效错误怎么解决
mysql标识符无效错误怎么解决

mysql标识符无效错误的解决办法:1、检查标识符是否被其他表或数据库使用;2、检查标识符是否包含特殊字符;3、使用引号包裹标识符;4、使用反引号包裹标识符;5、检查MySQL的配置文件等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

207

2023.12.04

Python标识符有哪些
Python标识符有哪些

Python标识符有变量标识符、函数标识符、类标识符、模块标识符、下划线开头的标识符、双下划线开头、双下划线结尾的标识符、整型标识符、浮点型标识符等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

319

2024.02.23

java标识符合集
java标识符合集

本专题整合了java标识符相关内容,想了解更多详细内容,请阅读下面的文章。

290

2025.06.11

JavaScript浏览器渲染机制与前端性能优化实践
JavaScript浏览器渲染机制与前端性能优化实践

本专题围绕 JavaScript 在浏览器中的执行与渲染机制展开,系统讲解 DOM 构建、CSSOM 解析、重排与重绘原理,以及关键渲染路径优化方法。内容涵盖事件循环机制、异步任务调度、资源加载优化、代码拆分与懒加载等性能优化策略。通过真实前端项目案例,帮助开发者理解浏览器底层工作原理,并掌握提升网页加载速度与交互体验的实用技巧。

23

2026.03.06

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
最新Python教程 从入门到精通
最新Python教程 从入门到精通

共4课时 | 22.5万人学习

Django 教程
Django 教程

共28课时 | 4.8万人学习

SciPy 教程
SciPy 教程

共10课时 | 1.8万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号