SUBSTR实战:电商平台商品编号解析案例
2026/1/13 11:21:44
切片操作(仅适用于 list、tuple 等序列)
new_list=old_list[:]使用list()、dict()、set()构造函数
new_list=list(old_list)new_dict=dict(old_dict)使用copy模块的copy()函数(通用)
importcopy new_obj=copy.copy(old_obj)importcopy original=[[1,2],[3,4]]shallow=copy.copy(original)# 或 original[:]shallow[0][0]='X'print(original)# 输出: [['X', 2], [3, 4]] ← 被修改了!print(shallow)# 输出: [['X', 2], [3, 4]]修改嵌套列表会影响原对象,因为内部列表是共享的。
copy模块的deepcopy()函数importcopy new_obj=copy.deepcopy(old_obj)importcopy original=[[1,2],[3,4]]deep=copy.deepcopy(original)deep[0][0]='X'print(original)# 输出: [[1, 2], [3, 4]] ← 未被修改print(deep)# 输出: [['X', 2], [3, 4]]修改深拷贝后的对象不会影响原始对象。
| 场景 | 推荐 |
|---|---|
| 对象是简单的一维列表/字典(不含嵌套可变对象) | 浅拷贝足够,效率高 |
| 对象包含嵌套的可变对象(如列表中含字典)且需要完全隔离 | 必须用深拷贝 |
| 性能敏感且确定无嵌套引用 | 优先用浅拷贝或切片 |
deepcopy能正确处理对象之间的循环引用,不会无限递归。deepcopy比copy慢很多,尤其对大型嵌套结构。| 方法 | 代码 | 是否复制嵌套对象 | 适用场景 |
|---|---|---|---|
| 浅拷贝 | copy.copy(x)或x[:] | ❌ 否 | 简单结构、性能优先 |
| 深拷贝 | copy.deepcopy(x) | ✅ 是 | 嵌套结构、需完全独立 |
合理选择拷贝方式,既能避免意外副作用,又能保持程序效率。
自此,本文分享到此结束!!!