码迷,mamicode.com
首页 > 编程语言 > 详细

python序列的深拷贝和浅拷贝

时间:2019-08-28 17:05:44      阅读:132      评论:0      收藏:0      [点我收藏+]

标签:str   strong   数组   deepcopy   py函数   col   类型   利用   字节数组   

  • python中的不可变类型

    列举:数值,字符串、元组、字节串

    • 数值及字符串“可变”‘的假象
num = 123
mystr = abc
print(id(num), num)
print(id(mystr), mystr)
num = 456
mystr = def
print(修改后...)
print(id(num), num)
print(id(mystr), mystr)

# 结果:
140704113688128 123
1853358409744 abc
修改...
1853359869712 456
1853361326544 def

    表面上是对变量的修改,其实质是重新建立了对象,将引用赋给了变量,原来的对象被系统回收。

  • python中的可变类型

    列举: 列表、字典、字节数组、对象

  • 浅拷贝

    浅拷贝只拷贝可变类型的引用,在拷贝后的对象中对可变类型的修改会影响到原对象。

    有几种方式实现:

    1. 完全切片操作

    2. 利用系统函数list(), dict()

    3. 利用copy模块的copy函数

ll = [xiao, [china, 32]]
la = copy(ll)
lb = copy(ll)
print(id(ll), ll)
print(id(la), la)
print(id(lb), lb)
print(change...)
la[0] = zhang
la[1][0] = usa
la[1][1] = 40
print(id(ll), ll)
print(id(la), la)
print(id(lb), lb)

# 结果:
3006259174856 [xiao, [china, 32]]
3006259174536 [xiao, [china, 32]]
3006259174600 [xiao, [china, 32]]
change...
3006259174856 [xiao, [usa, 40]]
3006259174536 [zhang, [usa, 40]]
3006259174600 [xiao, [usa, 40]]
        
  • 深拷贝

  对比浅拷贝,深拷贝利用copy模块的deepcopy()函数会完全拷贝出独立的对象来。

ll = [xiao, [china, 32]]
la = deepcopy(ll)
lb = deepcopy(ll)
print(id(ll), ll)
print(id(la), la)
print(id(lb), lb)
print(change...)
la[0] = zhang
la[1][0] = usa
la[1][1] = 40
lb[0] = wang
lb[1][0] = japan
lb[1][1] = 49
print(id(ll), ll)
print(id(la), la)
print(id(lb), lb)

# 结果:
1957762145864 [xiao, [china, 32]]
1957762145544 [xiao, [china, 32]]
1957762145672 [xiao, [china, 32]]
change...
1957762145864 [xiao, [china, 32]]
1957762145544 [zhang, [usa, 40]]
1957762145672 [wang, [japan, 49]]

 

  • 意外发现

    元组中的列表不可以修改吗?

tt = (12, 33, [44, 55, 66])
print(tt)
# 修改
tt[2][0] = 0
print(tt)

# 结果:
(12, 33, [44, 55, 66])
(12, 33, [0, 55, 66])

## 元组中的元素tt[2]不可更改为其他内容,单列表中的元素可以随意修改。

    列表中的元组可以修改吗?

dd = [1, 2, 3, 4, (7, 8, 9)]
print(dd)
dd[4] = 0
print(dd)

# 结果:
[1, 2, 3, 4, (7, 8, 9)]
[1, 2, 3, 4, 0]

## 列表中元组内容不可修改,但dd[4]的值可修改。

 

python序列的深拷贝和浅拷贝

标签:str   strong   数组   deepcopy   py函数   col   类型   利用   字节数组   

原文地址:https://www.cnblogs.com/bryant24/p/11425094.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!