python 笔记23
.copy( ) 与 浅拷贝
s = [1,'Flamingo','Flamingo']
s2 = s.copy()
print s2
输出: [1,'Flamingo','Flamingo']
提问:如果现在修改s2的值,那么s的值会不会改变呢?
s = [1,'Flamingo','Flamingo']
s2 = s.copy()
s2[0] = 2
print(s)
print(s2)
输出:
[1, 'Flamingo', 'Flamingo']
[2, 'Flamingo', 'Flamingo']
这样是否能证明修改拷贝了的数据并不会影响原来的数据呢?
看下面一个例子:
s = [[1,2],'Flamingo','Flamingo']
s2 = s.copy()
s2[0][1] = 3
print(s2)
print(s)
输出:
[[1, 3], 'Flamingo', 'Flamingo']
[[1, 3], 'Flamingo', 'Flamingo']
显然,随着s2的修改,s的值也发生了改变。
那么s和s2之间到底存在什么样的关系呢?怎么解释这种关系?
这种关系称为"浅拷贝"。
这里列表a有4个值:a = [[1,2],3,4],其中1和2被放在了另一个列表中。
b有3个值:b = [1,3,4],1被放在了另一个列表中。
下面修改列表b的第一个值为8,b = [8,3,4],那么存储1和2的列表就发生了改变,从[1,2]变成了[8,2],而a[0]此时就是新的列表[8,2]了,a列表此时为:a = [[8,2],3,4]。
这就是"浅拷贝",只拷贝第一层数据,所以修改整型和字符串没有影响,但修改列表则有影响。当然对于可变的字典也是同样的原理。
对于整型和字符串则不会改变:
a = 1
b = a
a = 2
print(a)
print(b)
输出:
a = 2
b = 1
这里输出a和b的值不一样,区别于列表。
看下面两个例子理解copy()的原理:
copy浅拷贝内存解释:
提问:如果现在把a删了,那么b还存在吗?
回答:当然不会,删除a只是删除a这个变量名,而存在内存中的数据还存在,故b还是存在的。
浅copy的作用是什么呢?
举个栗子:
一位男性在银行开了一张信用卡,额度150000,剩余额度90000.
如果男性要给妻子开同一张信用卡的副卡呢?那么就能能通过浅拷贝来实现。
husband = ["Flam",123,[150000,90000]]
wife = husband.copy()
wife[0] = "Mingo"
wife[1] = 456
深拷贝 copy.deepcopy( )
如果我们要复制一份完全一样,而且不受其他变量影响的数据呢?
这个时候就需要深拷贝了。
需要引入一个copy模块。
例子:
网友评论