如何copy一个列表,使得两个列表地址不同,但是元素完全相同?
时间: 2024-09-17 16:02:34 浏览: 35
在Python中,当你创建一个新的列表并将另一个列表的所有元素复制到新列表时,实际上已经创建了一个新的对象,即使这两个列表包含完全相同的元素。这是因为列表是通过引用存储其元素的,而不是复制元素本身。所以,即使你创建了`list1.copy()`这样的深拷贝,也只是得到了一个指向相同底层元素的新引用。
如果你想要创建一个全新的列表,其中包含与原列表相同但独立的对象,你应该使用`list()`构造函数或者序列推导式。这将创建一份完全独立的新列表,即使它们的原始元素是相等的,如字符串、数字等不可变类型。
例如:
```python
# 原始列表
original_list = [1, "hello", [2, 3]]
# 深拷贝
copied_list = list(original_list)
# 或者更简洁的方式
copied_list = [x for x in original_list]
print(id(original_list)) # 输出原列表的内存地址
print(id(copied_list)) # 输出新列表的内存地址,通常不同
# 确认元素是否相同
print(original_list == copied_list) # 输出 True
print(original_list is copied_list) # 输出 False
```
阅读全文