3

【Python】copy

 3 years ago
source link: https://www.guofei.site/2018/08/06/copy.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

【Python】copy

2018年08月06日

Author: Guofei

文章归类: Python语法 ,文章编号: 1205


版权声明:本文作者是郭飞。转载随意,但需要标明原文链接,并通知本人
原文链接:https://www.guofei.site/2018/08/06/copy.html

Edit

主要是 copy.copycopy.deepcopy 的区别

copy

import copy
a=['a','b','c','d']
a_copy=copy.copy(a)
a[0]='e'

print(a,a_copy)

[‘e’, ‘b’, ‘c’, ‘d’] [‘a’, ‘b’, ‘c’, ‘d’]
a变化后,a_copy 并不跟着变化

那如果list里面包含了子列表呢

import copy
a=['a','b',['c1','c2'],'d']
a_copy=copy.copy(a)
a[2][1]='c3'

print(a,a_copy)

[‘a’, ‘b’, [‘c1’, ‘c3’], ‘d’] [‘a’, ‘b’, [‘c1’, ‘c3’], ‘d’]
为什么结果跟着变了呢,因为copy为浅copy,只复制了第一层数据,列表里存储的子列表,打印出来是子列表,其实,在内存里,列表里只是存储了子列表的内存地址,子列表在内存里是单独存储的

浅拷贝的应用举例

# 比如两口子,共有一个账号存款
import copy

card = ['name', ['saving', 100]]  # 作为一个模板
husband = copy.copy(card)
wife = copy.copy(card)
husband[0] = 'zhangsan'
wife[0] = 'fengjie'
husband[1][1] -= 20  # 丈夫取出20,还剩下80
print(husband, wife) # 两个人的账号存款同时变动

deepcopy

deepcopy可以递归地把所有数据拷贝一边。
如果数据很大,完全复制就是存储两份数据,占用内存,慎用!

import copy
a=['a','b',['c1','c2'],'d']
a_copy=copy.deepcopy(a)
a[2][1]='c3'

print(a,a_copy)

参考文献

https://docs.python.org/3/


您的支持将鼓励我继续创作!

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK