美文网首页python专题
Python之深浅复制

Python之深浅复制

作者: 扯扯_2c79 | 来源:发表于2018-03-08 00:22 被阅读0次

深复制、浅复制

定义

  • 在Python中对象的赋值其实就是对象的引用。当创建一个对象,把它赋值给另一个变量的时候,python并没有复制这个对象,只是将变量的地址指向了这个对象。(python是地址赋值)

浅复制:复制了最外围的对象本身,内部的元素都只是复制了一个引用而已。通俗的理解也就是将某个变量指向了该对象的地址,复制前后的两个变量指向同一个地址。

深复制:外围和内部元素都进行了复制,而不是引用。也就是,把对象复制存储到另一个地址空间上,并使变量指向这个新的地址空间。

应用范围

1,切片可应用于:列表、元组、字符串,但不能应用于字典。
2,深浅拷贝,既可应用序列(列表、元组、字符串),也可应用字典。

图解深、浅复制:

  • 浅复制:

假设存在一个列表[1, 2, 3, 4, 5, 6]它的地址为“40005000”,其浅复制过程如图:


浅复制
  • 深复制:

同样假设存在一个列表['A', 'B', 'C']它的地址为“60008000”,其深复制过程如图:


深复制

程序示例:

  • 浅复制
list1 = [1, 2, 3, 4, 5]

print('list1:', list1)
print('list1的地址为:', id(list1))
print()

list2 = list1    #进行列表浅复制


print('list2', list2)
print('list2的地址为:', id(list2))
print()

list1[2] = 10
print('list1:', list1)
print('list2:', list2)
print()

list2[3] = 20
print('list1:', list1)
print('list2:', list2)
list1: [1, 2, 3, 4, 5]
list1的地址为: 1614951040008

list2 [1, 2, 3, 4, 5]
list2的地址为: 1614951040008

list1: [1, 2, 10, 4, 5]
list2: [1, 2, 10, 4, 5]

list1: [1, 2, 10, 20, 5]
list2: [1, 2, 10, 20, 5]
  • 深复制
list1 = ['A', 'B', 'C', 'D', 'E']

print(list1)
print('list1的地址为:', id(list1))

print()
list2 = list1[:]    #进行列表深复制
print()

print(list2)
print('list2的地址为:', id(list2))

print()
list1[2] = 'Hello'
print('list1:', list1)
print('list2:', list2)

print()
list2[4] = 'World'
print('list1:', list1)
print('list2:', list2)
['A', 'B', 'C', 'D', 'E']
list1的地址为: 1614950970632


['A', 'B', 'C', 'D', 'E']
list2的地址为: 1614950980936

list1: ['A', 'B', 'Hello', 'D', 'E']
list2: ['A', 'B', 'C', 'D', 'E']

list1: ['A', 'B', 'Hello', 'D', 'E']
list2: ['A', 'B', 'C', 'D', 'World']

总结:

  • 浅复制:地址复制,复制前后两对象指向相同的地址,指向同一段空间,修改任意一个对象,另一对象也同样的被修改。

  • 深复制:将原来的内容复制到一段新的内存空间,复制前后的两对象指向不同的地址。修改任意对象中的值,只影改变自己。

注意:以后在做数据的清洗、修改或者入库的时候,应对原数据进行深复制一份,以防数据修改之后,找不到原数据。

相关文章

  • Python之深浅复制

    深复制、浅复制 定义 在Python中对象的赋值其实就是对象的引用。当创建一个对象,把它赋值给另一个变量的时候,p...

  • 关于python深浅复制总结

    先不看概念,直接看实例 浅复制 下面是图解(截图画的有点次,理解意思就好?) 深复制 图解:

  • Python之深浅拷贝

    个人认为这个知识点比较重要,所以单独做了一个文章 Python中的浅拷贝就是对引用的拷贝,深拷贝就是对引用的拷贝,...

  • python之深浅拷贝

    python中,对象的赋值,拷贝(深/浅拷贝)之间是有差异的,如果使用的时候不注意,就可能产生意外的结果,其实这个...

  • 深浅复制

    深浅复制和属性为copy,strong值的变化问题 浅复制:只复制指向对象的指针,而不复制引用对象本身。对于浅复制...

  • 深浅复制

    Python中的对象之间赋值时是按引用传递的,如果需要拷贝对象,需要使用标准库中的copy模块。 copy.cop...

  • 深浅复制

    参考链接 iOS 集合的深复制与浅复制

  • 深浅复制

    为了理解这种做法,首先要知道,两种情况: 对非集合类对象的 copy 与 mutableCopy 操作; 对集合类...

  • iOS中的深浅复制

    iOS中的深浅复制

  • [转]Python3.tkinter实践之文献复制工具Ching

    Python3.tkinter实践之文献复制工具ChinglishCopier 原文: https://blog....

网友评论

    本文标题:Python之深浅复制

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