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

python基础之赋值/深copy/浅copy

时间:2016-05-04 20:59:10      阅读:166      评论:0      收藏:0      [点我收藏+]

标签:

首先,不管是赋值还是深浅copy,都是针对那些可能会产生变化的值进行区分的,也就是对于数字,字符串来说,区分赋值,深浅copy是毫无意义的。

那么,让我们来对那些可变的像list set dict tuple……来进行探讨。

赋值:

技术分享

  有两种修改n的方法:

  1  直接对n赋值

技术分享

 

>>> n=[1,2]
>>> g=n
>>> id(n)
140529062430792
>>> id(g)
140529062430792
>>> n=[1,3]
>>> g
[1, 2]
>>> id(n)
140529062430920
>>> id(g)
140529062430792

 

 

 

  2  对n的某个元素进行赋值

技术分享

 

>>> n=[1,2]
>>> g=n
>>> id(n)
140529062430728
>>> id(g)
140529062430728
>>> n[1]=3
>>> g
[1, 3]
>>> id(n)
140529062430728
>>> id(g)
140529062430728

 

浅copy

 

技术分享

 

 

>>> import copy
>>> name=[‘tong‘,‘yang‘]
>>> n=[1,name]
>>> g=copy.copy(n)
>>> g
[1, [‘tong‘, ‘yang‘]]
>>> id(n)
140529062259976
>>> id(g)
140529062259848 #两个变量(n和g)的地址不相同

  当修改n的name的元素时:

>>> name[1]=hua
>>> n
[1, [tong, hua]]
>>> g
[1, [tong, hua]]
>>> id(n)
140529062259976
>>> id(g)
140529062259848
#n和g的值相同,并且内存地址都没有改变

  浅copy只会copy一层,所以在上例中n和g的值都改变了

深copy

技术分享

>>> name=[tong,yang]
>>> n=[1,name]
>>> g=copy.deepcopy(n)
>>> g
[1, [tong, yang]]   #g的第二个元素已经不是变量name了。
>>> id(n)
140529062430728
>>> id(g)
140529062259976
#n与g的地址不同

  当修改name的元素时:

>>> name[1]=hua
>>> n
[1, [tong, hua]]
>>> g
[1, [tong, yang]]
#n的值变了,但g的值没有变。深copy会copy所有层

  深copy则会copy所有层,并且会将其中的变量的值直接输出取代变量。

本文参考了:http://www.cnblogs.com/wupeiqi/articles/5133343.html

 

python基础之赋值/深copy/浅copy

标签:

原文地址:http://www.cnblogs.com/MnCu8261/p/5459605.html

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