美文网首页
赋值、浅拷贝、深拷贝区别

赋值、浅拷贝、深拷贝区别

作者: 余安缘 | 来源:发表于2018-10-20 12:17 被阅读0次

1.赋值
a = 1
print(id(a))
b = a
print(id(b))
a = 2
print(id(a))
print(id(b))
输出结果为:
258226432
258226432
258226448
258226432
通过输出结果我们可以发现,当给变量a赋值1时,python会首先给值1划分一定空间存放这个值,这个值1的id为258226432,然后将a指向该空间,再将a赋值给b的时候,b也指向了该空间。再将2赋值给a时,首先会划分一个空间存放2的值,再将a指向2所在的空间,而此时b的值不变。

2.浅拷贝
语法:copy.copy
import copy
list1 = [1,2,[3,4]]
print(id(list1))
print(id(list1[2]))

list2 = list1[:]
print(list2)
print(id(list2))
print(id(list2[2]))

list3 = copy.copy(list1)
print(list3)
print(id(list3))
print(id(list3[2]))

list1[2].append(5)
print(list1)
print(id(list1))
print(id(list1[2]))
print(list2)
print(id(list2))
print(id(list2[2]))
print(list3)
print(id(list3))
print(id(list3[2]))

list1.append(6)
print(list1)
print(id(list1))
print(id(list1[2]))
print(list2)
print(id(list2))
print(id(list2[2]))
print(list3)
print(id(list3))
print(id(list3[2]))
输出结果为:
10368824
10367904
[1, 2, [3, 4]]
10833592
10367904
[1, 2, [3, 4]]
10833792
10367904
[1, 2, [3, 4, 5]]
10368824
10367904
[1, 2, [3, 4, 5]]
10833592
10367904
[1, 2, [3, 4, 5]]
10833792
10367904
[1, 2, [3, 4, 5], 6]
10368824
10367904
[1, 2, [3, 4, 5]]
10833592
10367904
[1, 2, [3, 4, 5]]
10833792
10367904
通过对比可以发现,浅拷贝只会拷贝第一层地址,深层地址不会拷贝,当深层地址随内容改变而改变的时候,浅拷贝的内容也会随之改变。

3.深拷贝
语法:copy.deepcopy
import copy
list1 = [1,2,[3,4]]
print(list1)
print(id(list1))
print(id(list1[2]))

list2 = copy.deepcopy(list1)
print(list2)
print(id(list2))
print(id(list2[2]))

list2[2].append(5)
print(list1)
print(id(list1))
print(id(list1[2]))
print(list2)
print(id(list2))
print(id(list2[2]))
输出结果为:
[1, 2, [3, 4]]
13186872
13185992
[1, 2, [3, 4]]
13651680
13651880
[1, 2, [3, 4]]
13186872
13185992
[1, 2, [3, 4, 5]]
13651680
13651880
通过输出结果可知,当使用深拷贝的时候,深层地址也会被拷贝,改变内嵌列表的内容,原本列表的内容不会改变。

相关文章

  • python的浅拷贝和深拷贝

    对于不可变类型,浅拷贝和深拷贝没有区别 对于不可变类型 赋值 浅拷贝 深拷贝

  • js深拷贝浅拷贝

    目录 一.数据类型 二.浅拷贝与深拷贝 三.赋值和浅拷贝的区别 四.浅拷贝的实现方式 五.深拷贝的实现方式 一.数...

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

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

  • js 对象深拷贝&浅拷贝

    对象深拷贝和浅拷贝的区别: 浅拷贝: 赋值对象的引用,而不是对象的本身;深拷贝: 把复制的对象所引用的全部对象都复...

  • 简介深浅拷贝

    深浅拷贝 python 直接赋值,浅拷贝和深拷贝 直接赋值 其实就是对象的引用 (可以理解成浅拷贝) 浅拷贝: 拷...

  • 赋值、浅拷贝、深拷贝区别

    1.赋值a = 1print(id(a))b = aprint(id(b))a = 2print(id(a))pr...

  • JS实现深拷贝、浅拷贝的方法

    一、赋值、浅拷贝与深拷贝的区别 二、深拷贝的方法 1.JSON转换 缺点: (1)如果对象里有函数,函数无法被拷贝...

  • 深拷贝 浅拷贝

    深入认识深拷贝 浅拷贝 公共方法 // 深拷贝 浅拷贝 对于基本类型来说 对于赋值操作 就是 深拷贝 因为值...

  • Python中的引用赋值,深拷贝,浅拷贝

    摘要:Python,引用赋值,深拷贝,浅拷贝 总结一下Python中的变量的引用赋值,深拷贝和浅拷贝,先上结论 赋...

  • 深拷贝和浅拷贝

    干货!深拷贝和浅拷贝的区别 深拷贝才是拷贝,浅拷贝就是Retain Copy与Retain的区别 Copy: 根据...

网友评论

      本文标题:赋值、浅拷贝、深拷贝区别

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