Python copy() 语法
copy() 是 Python 列表的一个方法,它用于浅复制(浅拷贝)一个列表。copy() 会创建一个新的列表对象,新列表与原列表拥有相同的元素,但这些元素本身是引用。
如果原列表中的元素是不可变对象(如数字、字符串、元组),那么新旧列表的这些元素是独立的;但如果元素是可变对象(如其他列表、字典、自定义对象),那么新旧列表的这些元素将引用同一个底层对象。
语法:
list.copy()说明:
list 是一个列表。copy() 方法不接收任何参数,该方法会返回一个新列表。
提示: list.copy() 等价于 list[:]。
Python copy() 摘要
| 使用频率 | 中 |
|---|---|
| 修改原列表 | 否 |
| 时间复杂度 | O(n)(n为列表长度) |
| 官方文档 | 查看 |
Python copy() 示例
想要复制一个列表,初学小伙伴很容易想到使用 “=” 来实现,比如下面例子。
示例 1:使用 “=” 复制列表
old = ['红', '绿', '蓝']
# 复制列表
new = old
# 修改 new 第 1 个元素
new[0] = 'red'
print(old)
print(new)运行结果如下。
['red', '绿', '蓝']
['red', '绿', '蓝']分析:
使用 “=” 复制列表,新列表和旧列表指向的是同一个对象。此时修改任何一个列表的元素,另一个列表的元素也会跟着一起修改。
示例 2:使用 copy() 复制列表
old = ['红', '绿', '蓝']
new = old.copy()
new[0] = 'red'
print(old)
print(new)运行结果如下。
['红', '绿', '蓝']
['red', '绿', '蓝']分析:
想要复制一个列表,除了 copy() 方法之外,还可以使用列表切片的方式来实现。请看下面例子。
示例 3:使用切片复制列表
old = ['红', '绿', '蓝']
new = old[:]
new[0] = 'red'
print(old)
print(new)运行结果如下。
['红', '绿', '蓝']
['red', '绿', '蓝']Python copy() 注意事项
在Python中,列表 copy() 方法实现的是浅拷贝,而不是深拷贝。
示例 4:copy() 实现的是浅拷贝
old = ['红', '绿', '蓝', ['橙', '黄']]
new = old.copy()
new[3][1] = 'orange'
print(old)
print(new)运行结果如下。
['红', '绿', '蓝', ['橙', 'orange']]
['红', '绿', '蓝', ['橙', 'orange']]分析:
从结果可以看到,如果列表元素是一个引用类型。那么修该元素后,另一个元素同样会被修改。
Python copy() 最佳实践
在实际开发中,小伙伴们应该遵循以下最佳实践。
- 避免使用 “=” 运算符直接赋值,来实现列表的拷贝。
- 对于简单列表的复制,优先使用 copy() 或 list[:]。
- 对于含嵌套结构的列表,再考虑使用深拷贝。
