变量的引用_概念

article/2025/9/14 20:27:39

理解了变量的引用之后, 对于我们理解在python 中的函数的参数传递和以及函数的返回值都是非常由帮助的.

当一个python 程序运行的时候, 变量和数据都是保存在内存中的.

变量的引用这个概念, 就是介绍一下当一个python 程序运行时, 变量和数据是怎样保存的, 并且保存的是什么内容.

当一个python 运行的时候, 变量和数据是分开保存的,.

数据就是保存的数据, 它在内存中有个独立的位置, 这个位置,我们通常把它叫做地址.

而变量中保存的就是数据在内存中的地址.

变量记录数据的地址这个动作, 我们就可以把它叫做引用.

在python 中, 我们可以使用id 这个函数来查看一个数据在内存中对应的地址

 a = 1 这句话是这么执行的, 在内存中用一个小格子, 这个小格子保存数字1, 同时这个小个子在内存中应该有一个固定的位置, 这个位置就在使用一个变量a, 让变量a 来记录一下数字1 的内存地址, 这样我们就可以通过变量a 访问到数字1了, 而这个红色的箭头就可以看作是一个引用.

使用id 这个函数确认一下数据在内存中的地址, 先把变量a 当作参数, 传递给id 这个函数, 回车后返回一个地址.

也就是说变量a 这个数据是保存在内存中 10914368 这个位置.

 在使用id(1) 来查看一下数字1 对应的内存地址.

数字1 的内存地址就是 10914368.

若b = a 的话, 表设计e变量b 应该保存数字1, 在使用 id 这个函数来查看一下变量b中保存数据所在的内存地址, b 中的地址仍然是10914368.

应该这样看待a, 1, b 这三个10914368, b = a, 就等同于让变量b 记录了变量 a 中的数值, 就是让变量b 同样保存了 1 的内存地址, 这就叫变量b 引用了数字1, 我们通过a 也好, b 也好, 都能访问到数字1.

 再写个a = 2, 但没回车, 变量a 已经在内存中存在(因为之前已经定义了a = 1), 再用id 函数查看一下变量a 中的内存地址, a 中的地址发生了变化, 变成了10914400.

 但变量b 中保存的数据地址仍然是10914368.

让a = 2, 就会重新在内存中开辟一个小格子, 这个小格子内放着数字2, 并且这个小格子的地址是10914400, 然后让a 断开对1 的引用, 也就是不再记录数据1 的内存地址10914368, 而是记录数据2 的内存地址10914400, 转为引用数据2.

但b 对1 的引用并没有断开, 所以b 仍然保存着数据 1 的'内存地址.

变量a, b 可以看作便签纸, 当a = 1执行的时候, 相当于搞了一个标签纸a 贴在1 的小格子上.

当b = a 这句代码执行的时候, 相当于又创建了一个标签纸 b, 把这个标签纸仍然贴在数据1的这个小格子上, 这样无论通过a 也好, b 也好, 都可以访问到数字1.

a = 2, 这句代码意味着,先把a 这张标签纸从数字1 的小格子上撕下来, 然后把这张标签纸贴到数字2 的小格子上, 

 

调用函数传递实参的作用

在函数调用时, 实参是通过引用来传递数据的, 

查看数据1 的内存地址.

 在函数内部, 使用id 这个函数来调用num 这个形参, 调用test(a),并运行一下程序.

 从上到下顺序执行, 执行a = 10 这句代码.

 调用test()函数时, 会把变量a 这个实参传递给test() 函数.

python 传递一个变量a 的时候, 并不会把数字10 传递到函数内部, 而是会把变量a 中保存的内存地址传递到函数内部.

调用函数时, 会跳转到函数的第一行代码来执行, 函数有一个形参num, 而调用函数时, 传递的是引

用,python 就会准备一个名字叫num 的变量, 并且让这个num 的变量来引用一下数字10 的地址, 因为我们调用函数是传递的是地址, 而不是数字10, 当num准备完成之后, 在函数执行时, 使用id 这个函数来查询变量num 保存数据的地址, 同样应该输出 10914656 这个内存地址.

 这就是在 python 中传递数据的一种方式.

 函数返回值传递引用

函数的返回值同样也是通过引用来传递的.

第一步先定义一个字符串变量, 第二步将字符串变量返回.

发现了 字符串的内存地址要比数字10 的内存地址大很多.

 

 注意: 如果函数有返回值, 但是没有定义变量接收, 程序不会报错,但无法获得返回结果, 应该定义一个变量来接收一下函数的返回结果, 再使用print 函数打印出来.

总结:将地址写在标签纸上一次,就算是一次变量的引用,也就算是一次地址的引用。标签纸的颜色多种多样,有a色,有b色,上面都写着一个相同的地址,8888,并且都贴在了该地址所对应的空间上(贴在外面),也就是贴在该地址所对应的内存空间的外面。总结:变量就是地址,变量名就是各种颜色的便签纸,变量的引用就是 将地址抄在便签纸上并贴在内存上的过程。


http://chatgpt.dhexx.cn/article/qhmlNSl1.shtml

相关文章

C++中引用变量详解

目录 一、什么是引用? 二、引用的注意事项 三、引用的本质 四、常量引用 五、引用的使用场景​​​​​​​ 六、引用和指针的区别 一、什么是引用? 引用实际上是给一个变量起别名,编译器不会为引用变量开辟一个新的内存空间&#xff…

C++变量引用

本篇介绍的变量引用与之前介绍的指针不是同一概念,它们有本质的区分: 1)不存在空引用。引用必须连接到一块合法的内存。 2)一旦引用被初始化为一个对象,就不能被指向到另一个对象。指针可以在任何时候指向到另一个对…

Java_引用变量

目录 1.认识 null ​编辑 2.数组的应用 3.数组作为函数的参数 4.数组作为函数的返回值 5.数组练习 数组转字符串 6.数组拷贝 (1)通过函数Arrays.copyOf()进行拷贝: (2)通过函数System.arraycopy()进行拷贝: (3)拷贝范围Arrays.copyOfRange() (4)比…

C++中的引用变量详解

文章目录 声明及定义代码引用变量的特点图片解释引用变量的本质引用变量的用途int & 和 const int & 的区别引用变量和宏定义(#define)的区别 声明及定义 [const] int& 变量名 右值 注意:[]内的是可选的。即这里的const限定词是…

引用变量及其作用

首先,先来明白一下什么是引用变量。 一个变量可以声明为一个引用,它起着该变量的别名的作用。对引用进行操作,实际上就是对被引用的变量进行操作。 引用运算符:&; 定义的一般形式:数据类型 &引用变…

变量的引用

引用是C对C的一个重要扩充。 1、引用的概念:变量的引用就是变量的别名。引用不是新定义一个变量,而是给已存在变量取了一个别名,编译器不会为引用变量开辟内存空间,它和它引用的变量共用同一块内存空间。 从上面图中就可以看出&a…

引用变量

引用就是一个变量的别名,声明: int a 0; int &b a; b就是a的引用,a和b指向的内存时同一个地址,b可以修改变量的值 一。主要的用途是将引用变量作为函数的参数传递,为什么呢? (1&…

C++入门基础—— 引用变量

目录 什么是引用: 引用的例子 引用的特性: 常量引用与非常量引用 使用场景 引用与指针的区别 什么是引用: 引用的概念 引用实际上就是取别名,提起这个名字就会让人知道是谁,谈起“鸡哥”就知道是坤坤,…

C++——引用变量

目录 一、创建引用变量 二、将引用作为函数参数 三、引用的属性和特别处 四、临时变量、引用参数和const 五、返回引用 六、何使用引用参数 七、参考书籍 引用变量是C新增的一种复合类型。引用是已定义的变量的别名(另一个名字,但两个名字都是表示…

014 变量的引用

目标: 1、变量的引用 2、可变和不可变量类型 3、局部变量和全局变量 一、变量的引用 。变量 和 数据 都是保存在 内存 中的 。在 python 中 函数 的 参数传递 以及 返回值 都是靠 引用 传递的 1.1 引用的概念 在 Python 中 。变量 和 数据 是分开存储的 。数据 保…

C语言动态内存分配函数

目录 1.malloc()2.free()3.calloc()4.realloc()5.小结 在C中我们开辟内存空间有两种方式 :1.静态开辟内存 : 例如: int a; int b[10]; 这种开辟内存空间的特点是 所开辟的内存是在栈中开辟的固定大小的 ,如a是4字节 ,数组b是40字节 ,并且数组在申明时必须指定其长度 , 如果是全…

【C语言】------ 动态内存分配

动态内存开辟详解 动态内存分配什么是动态内存分配? 一、为什么使用动态内存分配呢?二、动态内存函数1.malloc和free2.calloc和realloc 三、常见的动态内存错误1.对NULL指针的解引用操作2.对动态内存开辟的越界访问3.向free传递一个非malloc函数返回的指…

【C语言】为什么存在动态内存分配

文章目录 前言一、动态内存分配定义 二、动态内存分配的意义1.可以控制所开辟的内存大小2.可以多次利用这部分空间 三,动态内存函数的介绍 前言 提示:我们先来看一个在vs编译器下,同学们常犯的错误 注意:在VS编译器下C语言是不支…

静态内存分配与动态内存分配

静态内存分配与动态内存分配 动机 平时看c/c的书籍时,总会看到一种观点,说是C/C语言使用的时候动态内存分配是最重要的,使用malloc等函数分配的内存必须要释放,否则及其容易出现内存泄露。但是自己有时候挺奇怪的,啥…

JVM内存分配机制

Java虚拟机最重要的工作就是如何给对象分配内存空间,以及通过GC如何回收已经不再使用的内存空间。这篇文章主要介绍JVM中的Java对象是创建过程、对象内存的分配机制以及对象内存的回收机制。 一、对象的创建 在前面的文章《JVM类加载机制》中讲过,JVM中…

C语言动态内存分配详解

文章目录 前言一、为什么存在动态内存分配1、已掌握的内存开辟方式2、上述开辟空间方式的特点3、为什么存在动态内存分配 二、动态内存函数的介绍1、malloc2、free3、calloc4、realloc 三、常见的动态内存错误1、对NULL指针的解引用操作2、对动态开辟内存的越界访问3、对非动态…

动态内存管理(内存的分配与回收)详解

** 1. 数据结构之动态内存管理机制 ** 通过前面的学习,介绍很多具体的数据结构的存储以及遍历的方式,过程中只是很表面地介绍了数据的存储,而没有涉及到更底层的有关的存储空间的分配与回收,从本节开始将做更深入地介绍。 在使…

关于C++的动态内存分配

为什么要使用动态内存分配? 比较常见的情况是当我们使用一个数组时,我们需要去声明它,同时我们还需要提供给它一个编译时常量用于指定数组的长度。但是,我们有时候需要的数组并不是定长的。例如,我们要存储一个班级所…

【C语言】动态内存的分配

目录 &#x1f34b;&#x1f34b;前言 &#x1f34b;&#x1f34b;动态内存分配的定义 &#x1f34b;&#x1f34b;动态内存的优势 &#x1f34b;&#x1f34b;<1> 可以控制内存的大小 &#x1f34b;&#x1f34b;<2> 可以多次利用这部分空间 &#x1f34b;…

动态内存分配函数

一、静态存储分配与动态存储分配&#xff1a; &#xff08;1&#xff09;静态存储分配 通常定义变量&#xff08;或对象&#xff09;&#xff0c;编译器在编译时都可以根据该变量&#xff08;或对象&#xff09;的类型知道所需内存空间的大小&#xff0c;从而系统在适当的时候…