美文网首页
python关于深复制浅复制

python关于深复制浅复制

作者: 奔跑的老少年 | 来源:发表于2018-07-10 10:58 被阅读0次

深复制浅复制均会重新分配一块内存地址,其区别在于深复制会递归遍历为每层都分配一个新的地址,而浅复制只分配最外层地址。但不可变类型(如string、tuple、int)的均不会重新分配地址

1、浅复制例子说明


import copy

a = [1,[2,3]]

b = copy.copy(a)

b[0] ='z'

b[1][0] ='two'

print(id(a),id(b))

print(id(a[1]),id(b[1]))

print(a,b)

结果如下:

17764040 17404360
17871368 17871368
[1, ['two', 3]] ['z', ['two', 3]]

浅复制a和b内存地址不同,其内层列表[2,3]地址相同,改变b外层值不会影响a,而改变内层值a和b的内层值都会改变,因为它们指向同一个地址

2、深复制例子说明

import copy

a = [1,[2,3]]
b = copy.deepcopy(a)
b[0] = 'z'
b[1][0] = 'two'
print(id(a),id(b))
print(id(a[1]),id(b[1]))
print(a,b)

结果如下:

17895112 17894792
18003592 18002824
[1, [2, 3]] ['z', ['two', 3]]

深复制最外层列表和内层列表的地址均重新分配,改变a或b的值不会相互影响

3、不可变类型

import copy
a = '123456'
b = copy.copy(a)
c = copy.deepcopy(b)
print(id(a),id(b),id(c))

结果如下:

6851248 6851248 6851248

a,b,c均指向同一个内存地址

4、关于赋值

import copy

a = [1,[2,3]]
b = a
b[0] = 'one'
print(id(a),id(b))
print(id(a[1]),id(b[1]))
print(a,b)

结果如下:

17698504 17698504
17806792 17806792
['one', [2, 3]] ['one', [2, 3]]

a和b指向同一内存,b[0] = 'one'即修改该内存里的值,故a也会改变。

import copy

a = '123'
b = a
b = '1'
print(id(a),id(b))
print(a,b)

结果如下:

8088632 4781928
123 1

b ='1'即b指向了另一个地址,并不是改变a指向的地址的值

相关文章

  • 深入浅出Python深拷贝浅拷贝

    所谓拷贝,就是复制。深拷贝,就是复制的比较多,浅拷贝,就是复制的比较少。在Python中,copy.copy可以完...

  • 拷贝与内存管理

    一、关于深拷贝和浅拷贝的总结 理解 本质上我认为区别在于复制是是指针复制(浅拷贝)还是复制到新的地址上(深拷贝) ...

  • Python列表赋值,复制,深拷贝以及5种浅拷贝详解

    Python列表赋值,复制,深拷贝以及5种浅拷贝详解 概述 在列表复制这个问题,看似简单的复制却有着许多的学问,尤...

  • python关于深复制浅复制

    深复制浅复制均会重新分配一块内存地址,其区别在于深复制会递归遍历为每层都分配一个新的地址,而浅复制只分配最外层地址...

  • python中复制,浅拷贝,深拷贝

    python中包含复制 浅拷贝与深拷贝 1.复制 复制没有拷贝子对象,未开辟新内存空间,也没有产生新object,...

  • python赋值、浅拷贝和深拷贝

    简介   python中关于对象复制有三种类型:直接赋值、浅拷贝和深拷贝,他们既有联系又有区别。在python中,...

  • Python底层|赋值 浅拷贝 深拷贝

    参考 python中的深拷贝和浅拷贝问题python的复制,深拷贝和浅拷贝的区别 结论 总体来说,赋值只是增加了一...

  • Javascript对象的深浅拷贝

    开门见山,有人叫对象的复制为深复制浅复制,也有人叫深拷贝浅拷贝。其实都是copy。 深拷贝(递归复制,复制所有层级...

  • 浅|深 复制

    浅复制 //只写main函数 //结果是 我们可以看到一旦pointArray1发生了改变pointArray2也...

  • JS深浅拷贝

    浅拷贝 浅拷贝的意思就是只复制引用,而未复制真正的值。 深拷贝 深拷贝就是对目标的完全拷贝,不像浅拷贝那样只是复制...

网友评论

      本文标题:python关于深复制浅复制

      本文链接:https://www.haomeiwen.com/subject/xzffpftx.html