关于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 中的值也会跟着改变,相当于浅拷贝。
注意:对于原子类型的数据如:数字、字符等,没有拷贝一说,产生的都是应用,因为它在内存是固定好地址分配的。

猜你喜欢

转载自blog.csdn.net/weixin_43269166/article/details/87385594
今日推荐