『python思考』关于列表的浅复制和深复制的理解
2016-09-22 10:10
344 查看
>>> mylist1 = [1, 2, 3, 4] >>> myl = mylist1 >>> myl [1, 2, 3, 4] >>> mylist1[0] = 5 >>> mylist1 [5, 2, 3, 4] >>> myl [5, 2, 3, 4]
这个就是浅复制
浅复制仅仅只是复制了对对象的引用,即 mylist1 和 myl 指向的是同一个对象,所以如果改变了该对象的元素的话,则 mylist1 和 myl 所指向的对象都会改变,因为实际上就是同一个对象
>>> id(mylist1) 202009976 >>> id(myl) 202009976可以看出两者指向的对象在内存中的地址是相同的,即是同一个对象
>>> import copy >>> mylist2 = [5, 6, 7, 8] >>> myl2 = copy.deepcopy(mylist2) >>> mylist2[0] = 9 >>> mylist2 [9, 6, 7, 8] >>> myl2 [5, 6, 7, 8]这个就是深复制
>>> id(mylist2) 200662512 >>> id(myl2) 202007336而深复制后的两个变量则指向的是两个不同的对象,可以把这两个对象理解为张得一模一样的双胞胎,虽然很像,但实际上是两个不同的人,所以其中一个人发生了改变(如受伤了)也不会影响到另一个人
>>> id(mylist3[0]) 30909144 >>> id(myl3[0]) 30909144 >>> id(mylist3[3]) 200634696 >>> id(myl3[3]) 202008136 >>> mylist3 = [1, "a", 3, [4, 5, 6], [[7, 8, 9]]] >>> myl3 = copy.deepcopy(mylist3) >>> id(mylist3[1]) 31110016 >>> id(myl3[1]) 31110016但是如果 mylist3 和 myl3 的元素指向的是同一个 『不可变』 的对象时,则 他们指向的仍然是同一个对象, 如 1 和 "a"
相关文章推荐
- 关于Python在函数中接收元组和列表的理解
- python3中关于列表复制的问题
- 调试用Python C API 写的程序问题还真多,关于import搜索路径的,复制过来,以防忘记
- 关于面向对象和面向过程的程序设计思想的思考和理解
- 进一步思考-关于Linus: 大多黑客甚至连指针都未理解
- python 列表复制问题
- Python关于列表的重组
- 关于选用Python IDE的一些思考
- Python列表复制
- Google优秀论文列表——关于国内科研的一点比较思考
- python中关于__name__和__main__的理解
- [Python]关于os.walk的理解
- 关于Python的列表append()返回None对象
- 《Dive Into Python》笔记:关于字典和列表
- 关于python的复制
- GPU(CUDA)学习日记(十一)------ 深入理解CUDA线程层次以及关于设置线程数的思考
- 关于Java栈与堆的思考,理解String(转)
- 关于.NET 使用堆栈来维护值类型变量的思考和理解
- 一些关于面向对象的思考(摘自python基础教程)
- 关于Base64的理解和思考