变量及变量内存管理

 1.变量的定义,什么是变量?

    量:衡量/记录现实世界中的状态,让计算机能够像人一样去识别世间万物。(很抽象,可以简单理解为一种状态)    变:现实世界中的状态是会发生改变的。

2.为什么要有变量?因为程序执行的本质就是一系列状态的变化。比如MOBA类游戏,游戏运行时会有经济,人数的变化。这些变化的量就是变量。

3.定义变量分为三部分:①·变量值    我们存放的数据,用于记录现实生活中状态。②·赋值符号   赋值。③·变量名    用来引用变量值,但凡调用变量值,就要通过变量名。

4.变量名的命名规范大前提:变量名的命名应该能反映变量值的记录状态。(容易识别,别人看到你的变量名就会知道他是用来记录什么类型的变量值)变量名只能是数字,字母,下划线的任意组合(变量名不能以数字开头)关键字不能声明为变量名。关键字查看:help(“keywords”)

5.变量名的两种命名风格①·驼峰体  AgeOfOldboy ②·下划线 age_of_oldboy (为了和常量区分开,一般下划线命名会使用小写字母+下划线+数字)

6.常量常量就是不变的量,不存在状态变化。python语法里没有强制性去定义常量,都是约定俗成,用全大写+下划线取命名常量。C语言里一旦定义了常量,则常量不能修改。

7.python的内存管理有个引用计数的概念:变量值被引用的次数。比如x = 10 变量值读入到内存,内存会分配一块空间给10.变量名x指向这个地址,此时这个地址可以通过x来调用,引用计数为1.y = x x赋值给y,y也指向10所在的内存地址,通过y也可以调用10,引用计数为2.x = 11 内存给11分配一块空间并且x解除和10之间的联系,引用计数减1,变成1.del y 接触y与10之间的联系,不能通过y来调用10,10这个变量值的引用计数为0.10这块内存相当于变成了一个垃圾内存,不能被调用。引用计数为0,变量值不能被调用,就变成了垃圾,python的垃圾回收机制会定义回收这些垃圾。c语言需要自己手动释放这些内存。

id() python解释器内置的方法。每一个变量值都有其内存地址,id()是用来反映变量值在内存中的位置。内存地址不同则id不同。

内存每分配给一个变量值一个内存地址,就是一个新的id,不管变量值是否相等。在IDE里,两个值相同,内存地址也相同(两个本应该独立的内存地址为什么id会相同?)。但是在交互式环境里,id值则不同,这个才符合内存地址的定义。为什么IDE里,两个变量值id会相同,是因为IDE里有个优化的机制,如果你两个变量值相同,内存会自行处理优化,不需要经过cpu再重新处理一次(因为两个值相同),节省一点时间,程序运行更快。

8.定义变量的三个特征

id()print(id(x))

type()print(type(x))

值print(x)

总结:
1、id相等,值一定相等2、值相等,id却不一定一样


原文地址:https://www.cnblogs.com/Roc-Atlantis/p/9093160.html

时间: 2024-10-29 20:17:26

变量及变量内存管理的相关文章

iOS-旧项目中手动内存管理(MRC)转ARC

在ARC之前,iOS内存管理无论对资深级还是菜鸟级开发者来说都是一件很头疼的事.我参 加过几个使用手动内存管理的项目,印象最深刻的是一个地图类应用,由于应用本身就非常耗内存,当时为了解决内存泄露问题,每周都安排有人值班用 Instruments挨个跑功能,关键是每次都总能检查出来不少.其实不管是菜鸟级还是资深级开发者都避免不了写出内存泄露的代码,规则大家都懂,可是 天知道什么时候手一抖就少写了个release? 好在项目决定转成ARC了,下面将自己转换的过程和中间遇到的问题写出来和大家共享,希望

黑马程序员----内存管理一《基本使用》

内存管理 1.为什么要进行内存管理 移动设备的内存极其有限,每个app所能占用的内存是有限制的: 当app所占用的内存较大时,系统就会发出内存警告,这时就的回收一些不需要使用的内存空间.比如:回收一些不需要的对象,变量等: 内存管理的范围:任何继承了NSObject的对象,对其他基本数据类型(int.char.float.double.struct.enum等)无效: 2.内存的基本结构 每个OC对象内部都有一个自己的引用计数器,是一个整数,表示:对象被调用的次数:即:有多少人正在使用这个OC对

【iOS开发-33】学习手动内存管理临时抛弃ARC以及retain/assign知识——iOSproject师面试必考内容

我们为什么须要内存管理?当使用内存达到40M和45M时候会发出警告,假设不处理,占用内存达到120M时直接强制关闭程序. 所以出现闪退除了是程序出现逻辑错误,还有可能是内存使用过大. (1)创建一个对象的过程:先分配内存空间存储对象:初始化成员变量:返回对象的指针. (2)对象在创建时,内部会自己主动创建一个引用计数器retainCount,当retainCount=0时,系统会回收当前对象,retainCount是唯一推断标记.release会-1.retain会+1,retain后返回的是自

Delphi7 内存管理及 FastMM

Delphi7 内存管理及 FastMM 研究 作者:刘国辉 一.           引言 FastMM 是适用于delphi的第三方内存管理器,在国外已经是大名鼎鼎,在国内也有许多人在使用或者希望使用,就连 Borland 也在delphi2007抛弃了自己原有的饱受指责的内存管理器,改用FastMM. 但是,内存管理的复杂性以及缺乏 FastMM 中文文档导致国内许多人在使用时遇到了许多问题,一些人因此而放弃了使用,我在最近的一个项目中使用了FastMM,也因此遇到了许多问题,经过摸索和研

OC 内存管理机制总结

OC 内存管理机制总结 一:OC内存管理机制目前分为两块,其一自动内存管理机制,其二手动内存管理机制: 1.首先我们从自动内存管理机制讲起: 1)什么是自动内存管理机制,自动内存管理机制就是程序中所创造的成员变量交由系统统一处理,不需要外部人员干预,有点像java中gc(垃圾回收机制). 2)之前是没有自动内存管理机制的,后期苹果想拓展自己的开发市场,吸引其他平台开发者入住ios开发阵营,其中收到内存管理是很发杂的一块,对于转入IOS开发者不利,因此苹果推出了自动内存管理机制. 2.接下来我们将

【iOS开发-33】学习手动内存管理暂时抛弃ARC以及retain/assign知识——iOS工程师面试必考内容

我们为什么需要内存管理?当使用内存达到40M和45M时候会发出警告,如果不处理,占用内存达到120M时直接强制关闭程序.所以出现闪退除了是程序出现逻辑错误,还有可能是内存使用过大. (1)创建一个对象的过程:先分配内存空间存储对象:初始化成员变量:返回对象的指针. (2)对象在创建时,内部会自动创建一个引用计数器retainCount,当retainCount=0时,系统会回收当前对象,retainCount是唯一判断标记.release会-1,retain会+1,retain后返回的是自己se

javascript 变量,作用域,内存管理小结

js的变量保存两种类型的数据——基本数据类型与引用类型.具有以下几点特征:   变量: 1)基本类型值在内存中占固定大小的空间,因此被保存在栈内存中; 2) 把保存基本类型值得变量赋给另一个变量,会创建这个值的副本; 3) 引用类型的值是对象,存在堆内存中; 4) 变量不会保存对象,只是创建了新的指针指向该对象,对象始终在堆内存中; 5) 指向对象的变量复制给一个新的变量,只是复制了指向对象的指针,最后两个变量都指向该对象; 6)  查看变量属于哪种基本类型得用typeof操作符,查看变量是哪种

block没那么难(二):block和变量的内存管理

本系列博文总结自<Pro Multithreading and Memory Management for iOS and OS X with ARC> 了解了 block的实现,我们接着来聊聊 block 和变量的内存管理.本文将介绍可写变量.block的内存段.__block变量的内存段等内容,看完本文会对 block 和变量的内存管理有更加清晰的认识. 上篇文章举了个例子,在 block 内获取了一个外部的局部变量,可以读取,但无法进行写入的修改操作.在 C 语言中有三种类型的变量,可在

PHP笔记 变量和内存管理

鸟哥的博客是个大宝库,正在从头看起. <深入理解PHP内存管理之谁动了我的内存> http://www.laruence.com/2011/03/04/1894.html 1.memory_get_usage 函数 int memory_get_usage ([ bool $real_usage = false ] ) PHP脚本使用的内存(不含 memory_get_usage() 函数本身占用的内存) memory_get_usage()的参数$real_usage,默认为 FALSE:当

IOS开发—block对外部变量的内存管理

block对外部变量的内存管理 代码块在ios中通常用于回调,本文主要介绍block对外部变量的管理机制.我们知道如果要在block中使用block外面的变量,如果该变量是局部变量,就要先将其申明为__block类型.为什么呢?这就涉及到block对外部变量的内存管理. 一.基本数据类型 先看下面测试代码: //局部变量 - (void)localDataTest { int localData = 100; NSLog(@"localData --%p",&localData