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的关于内存管理基础知识(虽然里面可能是由于版本问题,有点小错误)
Python的内存管理 小理解的更多相关文章
- python的内存管理机制
先从较浅的层面来说,Python的内存管理机制可以从三个方面来讲 (1)垃圾回收 (2)引用计数 (3)内存池机制 一.垃圾回收: python不像C++,Java等语言一样,他们可以不用事先声明变量 ...
- python的内存管理机制(zz)
本文转载自:http://www.cnblogs.com/CBDoctor/p/3781078.html 先从较浅的层面来说,Python的内存管理机制可以从三个方面来讲 (1)垃圾回收 (2)引用计 ...
- python学习笔记10(Python的内存管理)
用这张图激励一下自己,身边也就只有一位全栈数据工程师!!! 32. Python的内存管理 1. 对象的内存使用 对于整型和短字符串对象,一般内存中只有一个存储,多次引用.其他的长字符串和其他对象 ...
- Python的内存管理、命名规则、3个特性讲解
理解变量: 变:现实世界中的状态是会发生改变的 量:衡量/记录现实世界中的状态,让计算机能够像人一样去识别世间万物(例如:一个人的身高.体重等这些信息) 为什么要变量: 程序执行的本质就是一系列状态的 ...
- Objective C内存管理之理解autorelease------面试题
Objective C内存管理之理解autorelease Autorelease实际上只是把对release的调用延迟了,对于每一个Autorelease,系统只是把该Object放入了当前的A ...
- day21(1)---python的内存管理
垃圾回收机制: 不能被程序访问到的数据,就称之为垃圾. 引用计数:引用计数是用来记录值的内存地址被记录的次数的 每一次对值地址的引用都可以使得该值的引用计数+1 每一次对值地址的释放都可以使得该值的引 ...
- python的内存管理与垃圾回收机制学习
一.python内存申请: 1.python的内存管理分为六层:最底的两层有OS控制.第三层是调用C的malloc和free等进行内存控制.第四层第五层是python的内存池.最上层使我们接触的直接对 ...
- Python的内存管理和垃圾回收
内存管理 与Python对象创建相关的结构体 #define _PyObject_HEAD_EXTRA \ struct _object *_ob_next; \ struct _object *_o ...
- Python深入06 Python的内存管理
作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 语言的内存管理是语言设计的一个重要方面.它是决定语言性能的重要因素.无论是C语言的 ...
随机推荐
- onkeydown-onkeypress-onkeyup
CreateTime--2016年12月17日22:28:36Author:Marydononkeydown.onkeypress和onkeyup参考链接:http://www.jb51.net/ ...
- C语言printf
1.调用格式为 printf("<格式化字符串>", <参量表>); 其中格式化字符串包括两部分内容: 一部分是正常字符, 这些字符将按原样输出; 另一部 ...
- java 加密工具(产生证书)
给Tomcat服务器应用加密: 命令:keytool -genkey -alias tomcat -keyalg RSA -genkey产生密钥对 -alias取得别名 -keyalg RSA产生密钥 ...
- apache并发测试工具ab为什么测不准
apache并发测试工具ab为什么测不准 发表于2年前(2013-03-21 12:13) 阅读(1146) | 评论(1) 1人收藏此文章, 我要收藏 赞0 3月21日 深圳 OSC 源创会正在 ...
- Drupal administration theme
Drupal允许为管理后台设置独立的theme,保存在系统变量variable_get('admin_theme'). Drupal使用全局变量$theme来保存当前请求对应的主题.Drupal在启动 ...
- R语言-查找满足条件的数并获取索引
1.在R语言中,怎样找到满足条件的数呢? 比如给定一个向量c2.要求找到数值大于0的数: > c2 [1] 0.00 0.00 0.00 0.00 0.00 0.00 0.06 0.09 0. ...
- AsyncTask和AsyncQueryHandler之比较
定义AsyncTask子类 private class LoadContactsTask extends AsyncTask<Void, Void, List<TxrjContact> ...
- html导出图片
有一个神奇的库:html2canvas. 这个库简洁优美,使用方便. 下面先看一个小demo,它需要用到一张图片:haha.jpg. <html> <head> <scr ...
- 两个有序数组求中位数log(m+n)复杂度
leetcode 第4题 中位数技巧: 对于长度为L的有序数组,它的中位数是(a[ceil((L+1)/2)]+a[floor((L+1)/2)])/2 算法原理: 类似三分法求极值 两个人都前进,谁 ...
- QRCode - 二维码识别与生成
来源:Yi'mouleng(@丶伊眸冷) 链接:http://t.cn/R40WxcM 前言 有关二维码的介绍,我这里不做过多说明, 可以直接去基维百科查看,附上链接QR code(https://e ...