zoukankan      html  css  js  c++  java
  • Python的内存管理 小理解

    请看下面的一段代码:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    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'] = 10000
    print(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)   
    print(origin)#输出结果发生了改变

    讲一下这段代码的意思:

    我们首先给定一个字典origin = {'a':100,'b':[1,2,34,5]}

    我们想要得到这个字典对象的一份拷贝,目的是在操作这个对象的时候不会更改该对象的属性。由于Python对象的引用机制,我们知道,当把一个对象赋给一个变量的时候,实际上是建立了一个该变量到对象的引用。如图和代码所示,这是最基本的Python内存管理机制。

     

     因此我们得到上段代码的输出结果:

    1
    2
    3
    4
    5
    6
    7
    {'a': 100, 'b': [1, 2, 34, 5]}
    {'key2': {'a': 100, 'b': [1, 2, 34, 5]}, 'key1': {'a': 100, 'b': [1, 2, 34, 5]}}
    {'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]}}
    {'a': 1000, 'b': [1, 2, 34, 5]}

    其实这种改变在Javascript中也是一样的

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    <html>
    <script>
        obj = {};
        obj.a = [21,2,3,4,5,67,8]
        obj.b = {'key1':10,'key2':20,'key3':"hello,world"}
     
        globalValue={};
        globalValue.value1 = obj;
        globalValue.value2 = obj;
         
        globalValue.value1=[1,2,34,5,78]
        alert('test')
    </script>
    <body>
    </body>
    </html

    我们同样可以通过这种方法实现。

    在读这篇文章之前,可以先阅读一下Vamei的关于内存管理基础知识(虽然里面可能是由于版本问题,有点小错误)

  • 相关阅读:
    洛谷 P1195 口袋的天空
    洛谷 P3144 [USACO16OPEN]关闭农场Closing the Farm_Silver
    Bzoj3277 串
    Bzoj1312 / POJ3155 Neerc2006 Hard Life
    Bzoj2655 calc
    51Nod 1228 序列求和
    洛谷P2901 [USACO08MAR]牛慢跑Cow Jogging
    Bzoj1042 [HAOI2008]硬币购物
    Bzoj3884 上帝与集合的正确用法
    Bzoj4161 Shlw loves matrixI
  • 原文地址:https://www.cnblogs.com/zknublx/p/5876392.html
Copyright © 2011-2022 走看看