Python 何时会创建新对象?
技术百科
舞夢輝影
发布时间:2026-01-18
浏览: 次 Python创建新对象的时机取决于类型、赋值、运算及构造函数调用:不可变对象“修改”时必新建;可变对象需显式复制才新建;字面量、工厂函数、lambda、类实例化均每次新建。
Python 创建新对象的时机,主要取决于对象的类型、赋值方式、运算操作以及是否显式调用构造函数。不是每次赋值都会新建对象,关键看是否触发了“不可变对象的副本”或“可变对象的引用”,以及是否执行了创建逻辑。
不可变对象(如 int、str、tuple)的“新对象”常被隐式触发
对不可变对象做“修改”操作(如 +=、拼接、切片)时,由于原对象无法改变,Python 必须创建一个新对象来承载结果:
-
a = "hello"; b = a + " world"→b是全新字符串对象(a不变) -
x = 5; y = x + 1→y指向新整数对象6(尽管小整数会复用,但逻辑上仍是新绑定) -
t = (1, 2); u = t + (3,)→u是新建元组,非原地修改
可变对象(如 list、dict、set)通常不自动新建,除非显式要求
直接赋值或参数传递默认是引用传递,不会创建新对象;只有调用复制方法或构造函数时才真正新建:
-
lst1 = [1, 2]; lst2 = lst1→lst2和lst1指向同一列表对象 -
lst3 = lst1.copy()或lst3 = list(lst1)或lst3 = lst1[:]→ 创建新列表对象 -
d1 = {"a": 1}; d2 = dict(d1)或d2 = d1.copy()→ 新字典对象;而d2 = d1仍是引用
函数调用和表达式求值中隐含对象创建
每次调用字面量构造或工厂函数,都会生成新对象(即使值相同):
-
[]、{}、set()每次都返回新空容器 -
int("123")、str(42)、list("abc")都返回新对象 -
lambda x: x * 2每次定义都产生新函数对象(哪怕代码相同)
类实例化必然创建新对象
执行 MyClass() 时,Python 调用 __new__ 分配内存并返回新实例,再调用 __init__ 初始化:
-
a = MyClass(); b = MyClass()→a和b是两个独立对象(a is b为False) - 即使
__init__什么也不做,只要调用了构造函数,就已创建了新对象

# python
# 绑定
# 创建一个
# 每次都
# 不做
# 复用
# 时才
# 对象
# int
# 构造函数
# 字符串
# 仍是
# 切片
# 隐式
# Lambda
# copy
# 引用传递
# 求值
# 对不
相关栏目:
<?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怎么设置麦克风权限_允许应用访问Win1
- php修改数据怎么批量改状态_批量更新status
- mac怎么分屏_MAC双屏显示与分屏操作技巧【指南
- 如何使用Golang开发简单的聊天室消息存储_Go
- PythonFastAPI项目实战教程_API接口
- Python网络超时处理_健壮性设计说明【指导】
- Python大型项目拆分策略_模块化解析【教程】
- Win10如何优化内存使用_Win10内存优化技巧
- 一文详解网站被黑客入侵挂马解决办法
- Windows系统时间服务错误_W32Time服务
- Win11怎么关闭任务栏小组件_Windows11
- Win10怎么关闭自动更新错误弹窗_Win10策略
- Win11时间不对怎么同步_Win11自动校准互联
- php中常量能用::访问吗_类常量与作用域操作符使
- Win11怎么关闭自动维护 Win11禁用系统自动
- c++如何判断文件是否存在_c++ filesys
- Win10怎样设置闹钟贪睡时间 Win10闹钟贪睡
- Win11局域网共享怎么设置 Win11文件夹网络
- Win11怎么把图标拖到任务栏_Win11固定应用
- Win11怎么恢复出厂设置_Win11重置此电脑保
- Windows 10怎么隐藏特定更新补丁_Wind
- Win11怎么设置屏保时间_调整Win11屏幕保护
- Windows10如何删除Windows.old_
- c++ nullptr与NULL区别_c++11空
- PHP怎么接收URL中的锚点参数_获取#后面参数值
- 如何减少Golang内存碎片化_Golang内存分
- 如何在 Laravel 中通过嵌套关联关系进行 o
- 如何在Windows中创建新的用户账户?(标准与管
- c++怎么实现高并发下的无锁队列_c++ std:
- Win11怎么关闭贴靠布局_Win11禁用窗口最大
- 如何在 Go 中正确测试带 Cookie 的 HT
- 如何在Golang中理解指针比较_Golang地址
- c++怎么处理多线程死锁_c++ lock_gua
- Win11怎么设置快速访问主页_Windows11
- C++中的Pimpl idiom是什么,有什么好处
- Python爬虫项目实战教程_Scrapy抓取与存
- php删除数据怎么软删除_添加is_del字段标记
- 零基础学会Python自动化办公_高效处理Exce
- Win11输入法选字框不见了怎么办_Win11输入
- Python项目回滚策略_发布安全说明【指导】
- Python随机数生成_random模块说明【指导
- 作用域操作符会影响性能吗_php静态调用性能分析【
- Windows怎样关闭桌面弹窗广告_Windows
- Win11怎么关闭触摸键盘图标_Windows11
- Win11怎么关闭通知消息_屏蔽Windows 1
- Win11蓝牙开关不见了怎么办_Win11蓝牙驱动
- Win11怎么更改盘符_Win11磁盘管理修改驱动
- Win11怎么查看显卡温度 Win11任务管理器查
- Win10如何更改开机密码_Windows10登录
- Python项目维护经验_长期演进说明【指导】

QQ客服