python列表复制

我想实现一个列表复制的操作,于是我就写下了下面的代码:

list_1 = ['apple', 'banana', 'berry']
list_2 = list_1

list_2.remove('apple')
print(list_2)
print(list_1)

结果却是这个样子滴:

['banana', 'berry']
['banana', 'berry']

于是乎,我发现了一个问题,list_2 = list_1这样写并不是真正的列表复制,而是list_2 的指针指向了list_1所拥有的内容,类似下面这样:
在这里插入图片描述
在网上搜索后,学会了很多:

# 内建函数id()可以返回对象的唯一id。该id是对象的内存地址。
print(id(list_1), id(list_2))

结果如下:

2594026121288 2594026121288

也就是两者的内存地址相同,再次证实我的想法!

那么到底如何才能真正地实现复制操作呢? 方法如下:

# 方法1:
list_2 = list_1[:]

# 方法2:
list_2 = list(list_1)

# 方法3:
list_2 = list_1 * 1

# 方法4:
import copy

list_2 = copy.copy(list_1)
# or
list_2 = copy.deepcopy(list_1)

我们再次执行上面的代码:

list_2.remove('apple')
print(list_2)
print(list_1)
print(id(list_1), id(list_2))

结果如下:

['banana', 'berry']
['apple', 'banana', 'berry']
2594030892616 2594030892424

完美解决问题!!!
图片截自于链接:https://www.cnblogs.com/ifantastic/p/3811145.html
感谢iFantasticMe

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值