关于python中引用与深浅拷贝的问题

说明:

  1. 引用是将同一个对象贴上不同的标签,实际上相当于一个人有不同的名称。
  2. 浅拷贝是对对象的最顶层部分复制并创建一个新的对象(不过新对象中如果有可变对象的引用则受原拷贝对象的影响)
  3. 深拷贝是完全复制一份,并产生了一个新的对象,与原拷贝对象没有半毛钱关系。

情况一:

I = []
for i in range(10):
    I.append({'num':i})
print(I)

结果:[{‘num’: 0}, {‘num’: 1}, {‘num’: 2}, {‘num’: 3}, {‘num’: 4}, {‘num’: 5}, {‘num’: 6}, {‘num’: 7}, {‘num’: 8}, {‘num’: 9}]

情况二:

I = []
a = {'num': 0}
for i in range(10):
    a['num'] = i
    I.append(a)
print(I)

结果:[{‘num’: 9}, {‘num’: 9}, {‘num’: 9}, {‘num’: 9}, {‘num’: 9}, {‘num’: 9}, {‘num’: 9}, {‘num’: 9}, {‘num’: 9}, {‘num’: 9}]

原因是:字典是可变对象,在下方的 I.append(a)的操作中是把字典 a 的引用传到列表 l 中,当后续操作修改 a[‘num’]的值的时候,l 中的值也会跟着改变,相当于浅拷贝。
注意:对于原子类型的数据如:数字、字符等,没有拷贝一说,产生的都是应用,因为它在内存是固定好地址分配的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值