拷贝

作者: 午字横 | 来源:发表于2023-04-29 12:32 被阅读0次
1 、is 和 == 的不同
  • is是比较两个引用是否指向了同一个对象(引用比较)
  • == 是比较两个对象的值是否相等(值比较)
2、深拷贝和浅拷贝
import copy

a=[1,2]
b=[3,4]

c=a,b
d= c  #相当于浅拷贝 拷贝了引用,并没有拷贝内容,所以当再次给a复制的时候d的值也会变化

a.append(100)
print(id(a),a)
print(id(c),c)
print(id(d),d)

>>>
140555886182336 [1, 2, 100]
140555886213248 ([1, 2, 100], [3, 4])
140555886213248 ([1, 2, 100], [3, 4])

  • 浅拷贝:就是=
import copy

a=[1,2]
b=[3,4]

c=a,b
d=copy.copy(c) #浅拷贝 拷贝了引用,并没有拷贝内容,所以当再次给a复制的时候d的值也会变化

a.append(100)
print(id(a),a)
print(id(c),c)
print(id(d),d)

>>>
140623473328064 [1, 2, 100]
140623473379648 ([1, 2, 100], [3, 4])
140623473379648 ([1, 2, 100], [3, 4])
  • 深拷贝 :理解相当于创建一个全新的对象,这个对象除了内容跟拷贝的那个相当没有任何关系
import copy

a=[1,2]
b=[3,4]

c=a,b
d=copy.deepcopy(c) #深拷贝 对宇一个对象所有层次拷贝(递归),此时的d是一个全新的对象,再更改a的值不会对d产生影响

a.append(100)
print(id(a),a)
print(id(c),c)
print(id(d),d)

>>>
140003867186496 [1, 2, 100]
140003867207936 ([1, 2, 100], [3, 4])
140003867230976 ([1, 2], [3, 4])

2、切片和字典是浅拷贝
a=[1,2]
b=[3,4]
c=[a,b]

d=c[:]

print(id(d),d)

a.append(200)

print(id(d),d)


>>>
139748835851584 [[1, 2], [3, 4]]
139748835851584 [[1, 2, 200], [3, 4]]

注意点:浅拷贝对不可变类型和可变类型的copy不同

  1. copy.copy对于可变类型,会进行浅拷贝
  2. copy.copy对于不可变类型,不会拷贝,仅仅是指向
不可变数据类型
# 当该数据类型的对应变量的值发生了改变,那么它对应的内存地址也会发生改变,就称不可变数据类型,
# 包括:int(整型)、string(字符串)、tuple(元组)

x=1
print(id(x),x)

x=2
print(id(x),x)
可变数据类型
# 可变数据类型
# 当该数据类型的对应变量的值发生了改变,那么它对应的内存地址不发生改变,就称可变数据类型。
# 包括:set(集合)、list(列表)、dict(字典)

a=dict(name="daming",age=19)
print(id(a),a)

#a.update({"gender":"female"})
a["gender"]="female"
print(id(a),a)

总结:

拷贝其实很简单,只是有时仅仅是最顶层的那个引用拷贝了,有时又编程了递归拷贝,到底用哪种?

简单来说,如果浅拷贝能用则用,否则再用深拷贝,这样节省内存


2023-04-26

相关文章

  • iOS深拷贝(MutableCopy)与浅拷贝(Copy)的区别

    深拷贝和浅拷贝的概念 iOS中有深拷贝和浅拷贝的概念,那么何为深拷贝何为浅拷贝呢?浅拷贝:浅拷贝并不拷贝对象本身,...

  • iOS - copy 与 mutableCopy

    一说到拷贝,就不得不提浅拷贝和深拷贝。 何谓浅拷贝?何谓深拷贝? 往简单的说: 浅拷贝:拷贝地址。 深拷贝:拷贝内...

  • 深拷贝和浅拷贝

    1.深拷贝:地址的拷贝 2.浅拷贝:是值得拷贝 深拷贝和浅拷贝的区别 A拷贝B B变A变是浅拷贝 A拷贝B B变A...

  • iOS面试题-第二页

    11.深拷贝和浅拷贝的理解. 深拷贝;拷贝的内容. 浅拷贝:拷贝的指针. 深拷贝如: NSMutableDicti...

  • JavaScript之深拷贝与浅拷贝

    深拷贝和浅拷贝 深拷贝:改变拷贝后的结果,不会影响拷贝之前的内容 浅拷贝:改变拷贝后的结果,会影响拷贝之前的内容 ...

  • java 对象的拷贝

    拷贝:即复制 对象拷贝:即对象复制 java 对象拷贝分类:浅拷贝、深拷贝 java 对象的浅拷贝和深拷贝针对包含...

  • iOS--拷贝相关题

    1、什么是深拷贝什么是浅拷贝?浅拷贝和深拷贝的区别 * 浅拷贝(shallow copy):指针拷贝,对于被拷贝对...

  • copy和mutableCopy的区别

    1,深拷贝和浅拷贝的区别 浅拷贝:并不拷贝对象本身,仅仅是拷贝指向目标对象的指针,并没有拷贝内容;深拷贝:直接拷贝...

  • 深拷贝、浅拷贝的理解与使用场景

    什么是深拷贝、浅拷贝? 通俗解释:深拷贝是内容拷贝,浅拷贝是地址拷贝 区别点: 深拷贝会创建一个新的内存空间,拷贝...

  • 2017.7.24总结

    1、深拷贝与浅拷贝浅拷贝是对于一个对象的顶层拷贝,拷贝了引用,没有拷贝内容。 深拷贝是对于一个对象所有层次的拷贝。...

网友评论

      本文标题:拷贝

      本文链接:https://www.haomeiwen.com/subject/chhmjdtx.html