小猿圈python学习-变量创建过程
变量创建过程
首先,当我们定义了一个变量name = ‘oldboy’的时候,在内存中其实是做了这样一件事:
程序开辟了一块内存空间,将‘oldboy’存储进去,再让变量名name指向‘oldboy’所在的内存地址。如下图所示:
我们可以通过id()方法查看这个变量在内存中的地址
name = “oldboy”
id(name)
4317182304
变量的修改
一般我们认为修改一个变量就是用新值把旧值覆盖掉, 可python是这样实现的么?
name = “oldboy”
id(name)
4317182304
name = “alex”
id(name) # 如果只是在原有地址上修改,那么修改后内存地址不应该变化呀。
4317182360
实际的原理什么样的呢? 程序先申请了一块内存空间来存储‘oldboy’,让name变量名指向这块内存空间
执行到name=‘alex’之后又申请了另一块内存空间来存储‘alex’,并让原本指向‘oldboy’内存的链接断开,让name再指向‘alex’。
变量的指向关系
提问:下面这段代码为何出现这样的现象?
name1 = ‘oldboy’
name2 = name1 # 把name1赋值给name2,这样name2的值也是oldboy了
print(name1,name2)
oldboy oldboy
name1 = ‘alex’
print(name1,name2) #改了name1后,name2为何没跟着改?
alex oldboy
要想知道上面问题的结果是为什么,首先要了解在内存中两个变量的存储情况
从上面的示意图中我们可以知道,当执行name2=name1这句话的时候,事实上是让name2指向了‘oldboy’所在的内存地址。
修改name1的值,相当于断开了name1到‘oldboy’的链接,重新建立name1和‘alex’之间的链接。在这个过程中,始终没有影响到name2和‘oldboy‘之间的关系,因此name2还是‘oldboy’,而name1变成了‘alex’。
- python学习过程-变量
- Python学习笔记--变量赋值过程
- Oracle基础学习三:过程PROCEDURE 和函数FUNCTION 的创建及调用
- SharpDevelop学习笔记--什么是codon,与codon的创建过程
- WebSrevice创建过程+LINQ学习总结
- Oracle基础学习三:过程PROCEDURE 和函数FUNCTION 的创建及调用
- [Python源码学习]之对象创建与销毁
- Python模块学习 ---- subprocess 创建子进程
- Python基础教程学习(四)类的创建与继承
- 温故而知新,学习MFC框架如何创建的过程
- Python模块学习 ---- subprocess 创建子进程
- php对象的学习1 对象在内存中的创建过程
- windows7平台搭建Python3开发环境(本学习过程全部基于Python3.x)
- Python学习笔记之一 文本文件的创建与显示
- Python学习笔记——常量和变量
- Python学习入门基础教程(learning Python)--2.2.1 Python下的变量解析 .
- 温故而知新,学习MFC框架如何创建的过程
- SQL Server 2005存储过程学习笔记——创建、修改存储过程
- SQL Server 2005存储过程学习笔记——创建、修改存储过程
- C#调用存储过程的方法,和简单存储过程创建的方法实例。【转载】为入门的朋友引路,大家互相学习。