变量与内存管理
把与C语言中的变量做一个对比, 可以更好地去了解理解那个变量。
变量
变量在C语言中
全局变量, 指的是那些被放置在内存的静态变量区域里面的数据。
所谓的局部变量, 它是在代码块中作为存放在内存里的代码区的一部分而存在的, 当这个局部变量被调用的是, 它就存放在栈里面, 是那个叫作内核区的内存栈的部分。
1而Python的变量存储,则是使用类似堆的方式管理内存,由Python内部机制统一分配回收内存。其中的那些变量, 还有关于变量的存储问题, 以及引用和对象之间的关系。
咱们作为面向对象这个编程语言领域的从业者, 过去一直特别相信一个说法, 觉得整个世界上的东西全都是对象。
人们可以把对象理解成一个个体, 这个个体是在经过了非常多轮的抽象处理之后, 把那些具备相同特点的物体类别给具体化、实例化了才形成的产物, 打个比方说来就是, 我们每一个人其实就是作为人类这个大类里的一个具体的对象代表存在的。
1classA():
2name ="123"
3def__init__(self):
4pass
5
6deffuna(self):
7pass
8deffuna():
9pass
10
11if__name__=="__main__":
12Fun =funa
13Variable = 1
14ClassA =A()
15ListA = [1,2,3]
16DictA = {'d':1,'e':2}
17TupleA = (1,2,3)
18Str ="python"
19print(type(Fun))
20print(type(Variable))
21print(type(ClassA))
22print(type(ListA))
23print(type(DictA))
24print(type(TupleA))
25print(type(Str))
输出的是:
class ‘’
class ‘int’
class ‘main.A’
class ‘list’
class ‘dict’
class ‘tuple’
class ‘str’
显然, 在中, 无论是基本的类型, 还是类、函数, 所有的事物全都被视作对象, 并放置在内存里面去进行存储, 此外也能够把它们简单地当作数值来看待。
其中这个变量它作为了一种引用形式, 去读取了对象内部所存储的那些信息, 这和C语言那种面向过程的方式有着明显的差异所在;在这里面的观点当中来说, 就是把这个变量视为对那个对象的指代关系,若用更为通俗直白的表述方式来阐释的话, 就是指它就是一个指向于对应数值的那个名字称谓。
所以的变量只是不过对于一块指定内存的引用, 也即对对象的引用, 或者称为指向值的名称, 相对于全局变量, 局部变量的赋值只是引用另一块内存。
在C语言里面, 一个变量代表一块特定的内存, 而不像某些其他编程语言, 能够看成数据已经存放在内存之中了, 被的变量对内存进行引用。即使变量不存在了, 内存里值也不会受到任何影响。
1if__name__=="__main__":
2
3a = 1
4b = 2
5print(id(a))
6print(id(b))
7
8a =b
9print(id(a))
10print(id(1))
11print(id(2))
12
13sys.exit(0)
输出的是:
咱们从输出结果上能够很明显地看出来, 同一块内存数据, 其实是能够被多个变量来引用的。而且呢, 常量和那个变量的内存地址, 是具有对应关系的。
1deffuna():
2a = 1
3print(id(a))
4
5if__name__=="__main__":
6
7a = 1
8funa()
9print(id(a))
10a = 2
11print(id(a))
12funa()
13
14sys.exit(0)
输出结果是:
一旦函数调用的过程执行完毕, 如果该类实例仍然处于被引用的状态, 那么该类型实例就会继续存在, 这种情况就类似于C++语言中的new操作符, 当对某个对象执行删除操作的时候, 也不会影响到那些对象依然还在被外部变量所指代的值。
当我们把这个给删除掉以后, 接着再那个输入print(id)这个代码的时候呢, 屏幕上面会出现下面这一段错误的提示内容。
1Traceback (most recent call last):
2File"C:/Users/Administrator/PycharmProjects/pysidetest/demo.py", line 69,in
3print(id(classA))
4NameError: name'classA'isnotdefined
如果仍有问题尚未获得解决的情形出现, 应当通过搜索交流群这一途径进行操作, 且在进入群聊之后, 需要执行下载资料工具以及安装包等相关动作。针对以上内容呈现给各位的最终总结性说明是, 感谢大家的观看!