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

一.引用

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']]

 

 

 

 

 

 

 

posted @ 2019-11-07 22:47  想吃手抓饼  阅读(491)  评论(0编辑  收藏  举报