您的位置:首页 > 编程语言 > Python开发

Python学习笔记-对象的引用和拷贝

2019-06-16 23:27 148 查看
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/u010802176/article/details/92440795

对象的引用和拷贝

  1. 引用
    赋值操作总是存储对象的引用,需要注意原处修改可变对象(列表,字典)时,可能影响程序中其他地方对相同对象的其他引用。
L1 = [1,2,3]
L2 = ['a',L1,'3']
D1 = {'a':L1}
print(L1)
print(L2)
print(D1)

运行结果:

[1, 2, 3]
['a', [1, 2, 3], '3']
{'a': [1, 2, 3]}

现在修改L1[1]的值在输出,可以看到L1在其他地方的引用也改变了:

L1 = [1,2,3]
L2 = ['a',L1,'3']
D1 = {'a':L1}

L1[1] = 'cc'

print(L1)
print(L2)
print(D1)

运行结果:

[1, 'cc', 3]
['a', [1, 'cc', 3], '3']
{'a': [1, 'cc', 3]}
  1. 拷贝
    拷贝的4种方法: 1. 没有限制条件的分片表达式L[:]能复制序列;
L1 = [1,2,3]
L2 = L1[:]
L1[1] = 'cc'
print(L1)
print(L2)

运行结果:

[1, 'cc', 3]
[1, 2, 3]

2.字典copy方法可以复制字典;

D1 = {'a':'aa', 'b':'bb'}
D2 = D1.copy()
D1['a'] = 'cc'
print(D1)
print(D2)

运行结果:

{'a': 'cc', 'b': 'bb'}
{'a': 'aa', 'b': 'bb'}

3.有些内置函数可以生成拷贝,如list

L1 = [1,2,3,4]
L2 = list(L1)
L1[1] = 5
print(L1)
print(L2)

运行结果:

[1, 5, 3, 4]
[1, 2, 3, 4]

4.copy标准库能够生成完整拷贝;

import copy

L1 = [1,2,3,4]
L2 = [L1,5,6,7]
L3 = L2[:] #浅拷贝,只能顶层拷贝,嵌套的序列不能拷贝
L4 = copy.deepcopy(L2) #完整拷贝,包括里面嵌套的序列
L1[0] = 9
L2[1] = 11 #注意比较L2,L3的输出结果
print(L1)
print(L2)
print(L3)
print(L4)

运行结果:

[9, 2, 3, 4]
[[9, 2, 3, 4], 11, 6, 7]
[[9, 2, 3, 4], 5, 6, 7]
[[1, 2, 3, 4], 5, 6, 7]

注意:无限制分片拷贝和字典的copy方法,只能做顶层拷贝,不能拷贝嵌套的数据结构。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: