首页 > 代码库 > 你真的了解Python吗 ---Python的内存管理
你真的了解Python吗 ---Python的内存管理
请看下面的一段代码:
origin = {‘a‘:100,‘b‘:[1,2,34,5]}obj_copy ={};print origin;obj_copy[‘key1‘]= origin;obj_copy[‘key2‘]= origin;print(obj_copy)print(‘我们试图改变obj_copy中某个Key值的内容‘)obj_copy[‘key1‘][‘a‘] = 10000print(obj_copy)obj_copy[‘key1‘][‘b‘] = "hello"print(obj_copy)print(‘----------------------‘)obj_copy[‘key1‘]={‘a‘:100,‘b‘:[1,3,4,56,3]}print(obj_copy) #输出结果发生了改变
讲一下这段代码的意思:
我们首先给定一个字典origin = {‘a‘:100,‘b‘:[1,2,34,5]}
我们想要得到这个字典对象的一份拷贝,目的是在操作这个对象的时候不会更改该对象的属性。由于Python对象的引用机制,我们知道,当把一个对象赋给一个变量的时候,实际上是建立了一个该变量到对象的引用。如图和代码所示,这是最基本的Python内存管理机制。
图片来自于网络。
因此我们得到上段代码的输出结果:
{‘a‘: 100, ‘b‘: [1, 2, 34, 5]}{‘key2‘: {‘a‘: 100, ‘b‘: [1, 2, 34, 5]}, ‘key1‘: {‘a‘: 100, ‘b‘: [1, 2, 34, 5]}}我们试图改变obj_copy中某个Key值的内容{‘key2‘: {‘a‘: 10000, ‘b‘: [1, 2, 34, 5]}, ‘key1‘: {‘a‘: 10000, ‘b‘: [1, 2, 34, 5]}}{‘key2‘: {‘a‘: 10000, ‘b‘: ‘hello‘}, ‘key1‘: {‘a‘: 10000, ‘b‘: ‘hello‘}}----------------------{‘key2‘: {‘a‘: 10000, ‘b‘: ‘hello‘}, ‘key1‘: {‘a‘: 100, ‘b‘: [1, 3, 4, 56, 3]}}
其实这种改变在Javascript中也是一样的
<html><script> obj = {}; obj.a = [21,2,3,4,5,67,8] obj.b = {‘key1‘:10,‘key2‘:20,‘key3‘:"hello,world"} globalValue=http://www.mamicode.com/{};>
我们同样可以通过这种方法实现。
在读这篇文章之前,可以先阅读一下Vamei的关于内存管理基础知识(虽然里面可能是由于版本问题,有点小错误)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。