Python变量绑定机制_引用模型解析【教程】
技术百科
舞姬之光
发布时间:2026-01-01
浏览: 次 Python变量是对象引用的标签而非存储容器,赋值即绑定标签到对象;可变对象可就地修改(id不变),不可变对象所有“修改”均创建新对象;函数传参是对象引用副本,影响取决于是否就地修改。
Python中变量不是盒子,而是标签——它不存储数据本身,而是指向内存中某个对象的引用。理解这一点,才能真正看懂赋值、函数传参、可变/不可变类型的行为差异。
变量赋值 = 绑定标签到对象
执行 a = 100 时,Python 做了三件事:创建整数对象 100(如果尚不存在),在内存中分配地址,再把名字 a 绑定到该地址。变量名本身不占“存储空间”,只是引用的别名。
- 多个变量可绑定同一对象:a = 100; b = a → a 和 b 指向同一个整数对象
- 重新赋值只是改绑:a = 200 后,a 指向新对象,b 仍指向原 100
- id() 可查看对象内存地址,is 操作符判断是否为同一对象
可变对象 vs 不可变对象:关键在“能否就地修改”
不可变对象(如 int、str、tuple)一旦创建,内容无法更改。所有“修改”操作(如 +=、s.upper())实际是新建对象并重绑变量。
可变对象(如 list、dict、set)允许就地修改内容,不改变对象身份(id 不变)。
-
lst = [1, 2]; lst.append(3) → lst 仍指向原列表对
象,只是内容变了 - s = "abc"; s += "d" → 创建新字符串对象,s 绑定到新地址
- 函数内修改传入的列表会影响外部;但对传入的整数重新赋值不会影响外部变量
函数参数传递:始终是“对象引用的传递”
Python没有“传值”或“传引用”的严格分类,而是统一为“传递对象引用的副本”。也就是说,函数收到的是原始引用的一个拷贝,它和调用方变量指向同一对象。
- 若函数内对可变对象调用就地方法(如 .append()),外部可见变化
- 若函数内对参数重新赋值(如 data = [9,9]),只是让形参指向新对象,不影响实参绑定
- 想避免意外修改,可显式传副本:func(lst.copy()) 或 func(lst[:])
常见陷阱与应对建议
默认参数为可变对象(如 def func(items=[]))是高频坑:该列表对象在函数定义时创建,后续每次调用都复用同一对象,导致“累积效应”。
- 正确写法:def func(items=None): items = items or [] 或 items = items if items is not None else []
- 使用 is 判断 None,不用 ==(因 None 是单例)
- 检查变量是否指向同一对象,优先用 is;比较值相等,用 ==
相关栏目:
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
AI推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
SEO优化<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
技术百科<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
谷歌推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
百度推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
网络营销<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
案例网站<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
精选文章<?muma echo $count; ?>
】
相关推荐
- Win11怎么设置快速访问_Windows11文件
- Linux如何安装JDK11_Linux环境变量配
- c++怎么实现高并发下的无锁队列_c++ std:
- PHP 中如何在函数内持久修改引用变量所指向的目标
- windows系统如何安装cab更新补丁_wind
- Win10如何更改电脑休眠时间_Windows10
- 获取 PHP 文件最后修改时间的正确方法
- 如何在Golang中处理JSON字段缺失_Gola
- MySQL 中使用 IF 和 CASE 实现查询字
- 如何使用Golang写入二进制文件_Golang
- php485读数据时阻塞怎么办_php485非阻塞
- mac本地php环境如何开启curl_curl扩展
- c++怎么使用std::unique实现去重_c+
- 如何在Windows中创建新的用户账户?(标准与管
- Mac如何修复应用程序权限问题_Mac磁盘工具修复
- Win10如何关闭安全中心所有通知 Win10禁用
- PHP的FastAdmin架构适合二次开发吗_特点
- 如何在 Go 项目开发中正确处理本地包导入与远程模
- Win11怎么设置应用分屏_Windows11贴靠
- Windows10系统更新错误0x80070002
- Mac如何备份到iCloud_Mac桌面与文稿文件
- c++中如何使用std::variant_c++1
- Windows 10怎么把任务栏放在屏幕上方_Wi
- Windows10如何删除恢复分区_Win10 D
- Win11怎么关闭自动调节屏幕亮度_Windows
- 如何提升Golang JSON序列化性能_Gola
- windows如何禁用驱动程序强制签名_windo
- Win11 C盘满了怎么清理 Win11磁盘清理和
- Win11怎么关闭粘滞键_彻底禁用Windows
- Win11怎么自动隐藏任务栏_Win11全屏显示设
- Win11截图快捷键是什么_Win11自带截图工具
- php查询数据怎么导出csv_查询结果转csv文件
- php嵌入式多设备通信怎么实现_php同时管理多个
- Python深度学习实战教程_神经网络模型构建与训
- Win10如何更改用户账户控制_Windows10
- Python抽象类与接口设计_规范说明【指导】
- Python对象比较与排序_魔术方法解析【教程】
- Linux怎么禁止Root用户远程登录_Linux
- php订单日志怎么按状态筛选_php筛选不同状态订
- Win11怎么关闭系统推荐内容_Windows11
- 如何使用Golang实现函数指针_函数变量与回调示
- Win11怎么清理C盘OneDrive缓存_Win
- Win11怎么设置开机问候语_自定义Win11锁屏
- Win11怎么关闭贴靠布局_Win11禁用窗口最大
- Win11怎么更改任务栏位置_修改注册表将Win1
- mac怎么右键_MAC鼠标右键设置与触控板手势技巧
- 如何高效删除 NumPy 二维数组中所有元素相同的
- Win11任务栏怎么固定应用 Win11将软件图标
- Win11怎么关闭触摸屏_禁用Win11笔记本触摸
- Win11怎么连接投影仪_Win11多显示器投屏设

象,只是内容变了
QQ客服