惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

P
Proofpoint News Feed
云风的 BLOG
云风的 BLOG
Apple Machine Learning Research
Apple Machine Learning Research
Hugging Face - Blog
Hugging Face - Blog
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Google DeepMind News
Google DeepMind News
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
雷峰网
雷峰网
B
Blog
月光博客
月光博客
博客园 - 【当耐特】
WordPress大学
WordPress大学
Microsoft Azure Blog
Microsoft Azure Blog
I
InfoQ
The GitHub Blog
The GitHub Blog
Engineering at Meta
Engineering at Meta
Jina AI
Jina AI
博客园 - Franky
MyScale Blog
MyScale Blog
H
Hackread – Cybersecurity News, Data Breaches, AI and More
Last Week in AI
Last Week in AI
B
Blog RSS Feed
H
Help Net Security

博客园 - emanlee

Django3 核心入门知识点 HTML + CSS + JS 入门核心知识点 vs code 使用python,必须安装python解释器 Ubuntu 修改 ulimit‑n(nofile,最大打开文件数) 博文阅读密码验证 - 博客园 博文阅读密码验证 - 博客园 博文阅读密码验证 - 博客园 博文阅读密码验证 - 博客园 博文阅读密码验证 - 博客园 Word里打出“方框中间带勾”的符号 Windows 10/11 安装 MySQL 5.7 步骤(内部使用) Python编程语言的运行速度(CPU时间),与C语言对比 设置MySQL随操作系统Ubuntu启动 2026年秋季,2027年春季,西安理工大学 校历 博文阅读密码验证 - 博客园 Windows 11,用任务栏的搜索框搜索到一个软件,点击无法打开, 是bug 拆分视频的软件工具,Avidemux 开源免费 无法在此设备上加载驱动程序,可行可用 ubuntu 设置北京日期时间 mysql 在新电脑上导入,出现错误:ERROR at line 4019: Unknown command '\''. - emanlee 安装 yarn npm : 无法加载文件 C:\Program Files\nodejs\npm.ps1,因为在此系统上禁止运行脚本。 - emanlee VS code, 最近打开过哪些项目或文件夹,把这些备份下来,到另外一台电脑上恢复 傲梅分区助手 【好用】 ubuntu 可以使用Windows远程桌面连接吗?【可以】 把xshell的全部连接和密码,从一台Windows 10电脑,迁移到Windows11电脑。 Windows 远程桌面(mstsc)完整迁移方案(含历史连接记录、RDP 配置、保存的账号密码)【可行】 Endnote,如何能完整迁移库和模版 ubuntu 安装 locate
Python赋值,什么时候传引用?
emanlee · 2026-04-26 · via 博客园 - emanlee

Python 里所有赋值,全都是「传引用」(地址引用),没有传统意义上的拷贝赋值。

区别只在:不可变对象看上去像值传递,可变对象明显是引用共享。

1. 先分两类对象

不可变对象(值不会改)

int、float、str、bool、tuple

可变对象(内容能原地改)

list、dict、set、自定义对象

2. 赋值本质(永远一样) 

不是把列表复制一份给 b

而是:a 和 b 指向同一个内存地址的同一个对象

👉 这就是传引用

3. 什么时候能明显看出「传引用」

只要是可变对象赋值、传参、函数返回,都是共享引用: 

lst1 = [1,2]
lst2 = lst1   # 引用传递,指向同一个列表
lst2.append(3)

print(lst1)  # [1,2,3]  跟着变了! 

原因:lst1、lst2 是同一个内存地址

4. 为什么不可变对象好像不是传引用? 

a = 10
b = a
b = 20
print(a)  # 10 没变

不是没传引用,而是:

不可变对象不能原地修改,重新赋值只是让 b 指向了新地址,原来的 a 不受影响。

5. 函数传参也是一样规则

  • 可变对象:函数内修改会影响外部(引用共享)
  • 不可变对象:函数内重新赋值不影响外部
def func(x):
    x.append(99)

lst = [1,2]
func(lst)
print(lst)  # [1,2,99]  外部被改了,就是引用传递

6. 快速记忆口诀

  1. Python 赋值全是引用传递,无值传递
  2. list/dict/set/ 自定义类:赋值、传参都共享地址,改一个全变
  3. int/str/tuple:看似不影响,只因不可变,重新赋值就换地址
  4. 想断开引用、独立修改:用 .copy()、切片 [:]deepcopy