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

浅谈python中的引用和拷贝问题

时间:2019-11-07 23:33:01      阅读:124      评论:0      收藏:0      [点我收藏+]

标签:com   end   print   info   pen   变化   内存   color   deepcopy   

一.引用

a = [a, b, c]
b = a
print(id(a))
print(id(b))


135300560
135300560

  可以看到,变量a 和 b 的 id是完全一样的,这就说明a和b是同时指向内存的同一个区域的,即b随a的变化而变化.

技术图片

 

a = [a, b, c]
b = a
a[1] = d
print(b)
b[2] = e
print(a)

[a, d, c]
[a, d, e]

 

二.浅拷贝  

  浅拷贝只是复制了的父对象,即复制后的变量和复制前的子对象还是指向同一个对象

  浅拷贝可以写为 copy.copy(obj) 或者 obj.copy()

import copy
a = [‘a‘, ‘b‘, [‘c‘, ‘d‘, ‘e‘]]
b = copy.copy(a)
a.append(‘e‘)
print(b)
a[0] = ‘g‘
print(b)
a[2].append(‘f‘)
print(b)

[‘a‘, ‘b‘, [‘c‘, ‘d‘, ‘e‘]]
[‘a‘, ‘b‘, [‘c‘, ‘d‘, ‘e‘]]
[‘a‘, ‘b‘, [‘c‘, ‘d‘, ‘e‘, ‘f‘]]

       画个图来理解就是如下:

技术图片

 

 

 当只有a元素的子元素里的元素有变化时,b才会引起改变

 

三.深拷贝

  深拷贝就比较好理解了,它相当于开辟了一个新空间是新指针指向新的空间,无论原对象怎么变化,新对象都不变

import copy
a = [a, b, [c, d, e]]
b = copy.deepcopy(a)
a.append(e)
print(b)
a[0] = g
print(b)
a[2].append(f)
print(b)


[a, b, [c, d, e]]
[a, b, [c, d, e]]
[a, b, [c, d, e]]

技术图片

 

 

 

 

 

 

浅谈python中的引用和拷贝问题

标签:com   end   print   info   pen   变化   内存   color   deepcopy   

原文地址:https://www.cnblogs.com/liangweijiang/p/11816355.html

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