关注
Python 装饰器、浅拷贝和深拷贝
装饰器(Decorator)
装饰器是Python中一种用于修改或扩展函数行为的工具。它本质上是一个高阶函数,接受一个函数作为参数,并返回一个新的函数。
示例:
def my_decorator(func):
def wrapper():
print("Before function call")
func()
print("After function call")
return wrapper
@my_decorator
def say_hello():
print("Hello!")
say_hello()
输出:
Before function call
Hello!
After function call
关键点:
- 装饰器使用 @ 语法糖,放在函数定义的上方。
- 装饰器可以用于日志记录、权限检查、性能测试等场景。
- 装饰器可以嵌套,多个装饰器会从下往上依次执行。
浅拷贝(Shallow Copy)
浅拷贝创建一个新对象,但不会递归复制对象内部的子对象。它只复制对象的引用。
实现方式:
- 使用 copy.copy() 函数。
- 使用对象的 copy() 方法(如果对象支持)。
示例:
import copy
original = [[1, 2, 3], [4, 5, 6]]
shallow_copied = copy.copy(original)
修改浅拷贝后的对象
shallow_copied[0][0] = 99
print("Original:", original)
print("Shallow Copied:", shallow_copied)
输出:
Original: [[99, 2, 3], [4, 5, 6]]
Shallow Copied: [[99, 2, 3], [4, 5, 6]]
关键点:
- 浅拷贝只复制最外层的对象,内部的子对象仍然是共享的。
- 修改浅拷贝对象中的可变子对象(如列表、字典)会影响原始对象。
深拷贝(Deep Copy)
深拷贝会递归复制对象及其所有子对象,创建一个完全独立的副本。
实现方式:
- 使用 copy.deepcopy() 函数。
示例:
import copy
original = [[1, 2, 3], [4, 5, 6]]
deep_copied = copy.deepcopy(original)
修改深拷贝后的对象
deep_copied[0][0] = 99
print("Original:", original)
print("Deep Copied:", deep_copied)
输出:
Original: [[1, 2, 3], [4, 5, 6]]
Deep Copied: [[99, 2, 3], [4, 5, 6]]
关键点:
- 深拷贝会递归复制所有子对象,创建一个完全独立的副本。
- 修改深拷贝对象不会影响原始对象。
- 深拷贝的性能开销较大,尤其是对于嵌套层次较深的对象。
浅拷贝 vs 深拷贝
特性:复制范围,浅拷贝只复制最外层对象,深拷贝递归复制所有子对象。
特性:子对象是否独立,浅拷贝子对象是共享的,深拷贝子对象是独立的。
特性:性能,浅拷贝较快,深拷贝较慢(尤其是嵌套层次深的对象)。
特性:适用场景,浅拷贝适用于对象结构简单,无嵌套可变对象;深拷贝适用于对象结构复杂,有嵌套可变对象。
总结
- 装饰器:用于扩展函数行为,语法简洁,功能强大。
- 浅拷贝:只复制外层对象,子对象共享,适合简单对象。
- 深拷贝:递归复制所有对象,完全独立,适合复杂对象。
查看原帖
点赞 评论
相关推荐
点赞 评论 收藏
分享
点赞 评论 收藏
分享

点赞 评论 收藏
分享
牛客热帖
更多
- 1... 25届游戏客户端开发求职总结2.3W
- 2... 广州25应届计算机 Java想转行1.2W
- 3... 💌【520限时活动公告】牛爱网高甜营业!你的恋爱通关秘籍已送达~9123
- 4... 回望春招路~草草用如履薄冰带过5849
- 5... 【26届四段大厂】大二字节&腾讯offer 投递技巧保姆级教程5222
- 6... 955和996的真正区别5029
- 7... 差不多还有一周就要去团子实习了,部门自我感觉不是很核心,但是现在比较焦虑。清楚自己是一个八股选手,项目经验几乎是0,比较依赖ai,外卖点评什么的都没敲过,自己的学习能力应该算中等?很害怕进去之后比较push,然后发现我是个水货把我提前开除了,想问问这段时间可以做些什么准备呢?速通一下外卖项目跟着看一遍视频?(有点担心跟着敲一遍时间不够)?4112
- 8... 从我家亲戚看学历论和努力论3322
- 9... 腾讯 CSIG 三面 面经 已OC!~3039
- 10... 我对面的同事,入职一个月没说话2995
正在热议
更多
# 一人一个landing小技巧 #
32107次浏览 605人参与
# 选offer应该考虑哪些因素 #
2377次浏览 69人参与
# 我的求职总结 #
1431次浏览 26人参与
# 你想留在一线还是回老家? #
32913次浏览 401人参与
# 聊聊你的职场新体验 #
153250次浏览 1353人参与
# 58同城求职进展汇总 #
30836次浏览 246人参与
# 四大天坑是哪四家? #
68899次浏览 198人参与
# 三一集团提前批进度交流 #
20057次浏览 129人参与
# 大学最后一个寒假,我想…… #
34886次浏览 434人参与
# 你们公司哪个部门最累? #
12446次浏览 102人参与
# 米哈游工作体验 #
13632次浏览 108人参与
# 牛友们的论文几号送审 #
32594次浏览 695人参与
# 你小时候最想从事什么职业 #
88305次浏览 1643人参与
# 查收我的offer竞争力报告 #
180080次浏览 1181人参与
# 你认为工作的意义是什么 #
138113次浏览 994人参与
# 互联网公司爆料 #
118162次浏览 668人参与
# 你觉得机械有必要实习吗? #
5536次浏览 60人参与
# 这些公司卡简历很严格 #
31225次浏览 154人参与
# 你们公司几号发工资 #
15988次浏览 106人参与
# 怎么防止在试用期被辞退 #
117670次浏览 874人参与