我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Python中的变量赋值

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Python中的变量赋值

引言:

Python中的变量在使用中很流畅,可以不关注类型,任意赋值,对于开发来说效率得到了提升,但若不了解其中的机理,往往也会犯一些小错,让开发进行的不那么流畅,本文就是从语言设计和底层原理的角度,带大家理解Python中的变量。

下面我们从一个简单例子开始:


a = 3

当我们代码中写入a=3时到底发生了啥,从概念上来说,Python会执行三个不同的步骤来完成这个请求:

  • 创建了一个对象来代表值3
  • 若是a尚未创建会创建一个变量a
  • 将变量a和新的对象3进行关联,称变量a为对象3的一个引用

上文提到的三个关键字,“对象”、“变量”、“引用”是Python中让变量得以运作的关键,我们在下一小节细细道来。

1 变量、对象、引用

先从概念说起:

对象是分配的一块内存,有足够的空间去表示它们所代表的值。

变量是一个系统表的元素,拥有指向对象的连接的空间。

引用时自动形成的从变量到对象的指针。

接着上文中a=3的三个步骤,咱们增加一句代码:


a = 3
b = a

下面通过一张图表征了两句话执行的结果:

关于b=a引发的操作为b同样也指向了3,建立了从变量b到对象3的引用,此部分实现了python的赋值操作。此部分引出了Python中的赋值操作的秘密,下面咱们先来看一下为什么Python中变量赋值时不用指定变量的类型呢,实际上从上面的概念中已经发现了一个重要定义:

>>> 类型属于对象,而不是变量

为了理解对象类型是如何使用的,我们看一下对一个变量多次赋值的结果:


a = 3
a = 'wali'
a = 3.1415926

从表面上看,a开始是一个整数,接着变成一个字符串,最后变成一个浮点,对于学习过C语言的人来说,这个是无法理解的,但对于python来说,这是可以执行的。看起来像是a的类型在连续改变,实际上我们理解了变量、引用、对象的概念以及“类型属于对象,而不是变量”这些知识后,我们会发现,实际发生了如下的事情:

执行中分别创建了整数类型的对象3,字符串的对象“wali”以及浮点数的对象3.14,变量a并不拥有这些类型,只是简单的通过引用分别指向了三个对象。

进一步深入研究就会发现,从Python语言实现的角度来说,每个对象都包含了一个头部信息,其中就标识了这个对象的类型。

此外,还有一个概念“引用计数器”,我们再来看下,最开始的代码:


a = 3
b = a

可能聪明的读者已经心里默默计算出对于对象3的引用计数器的值为2,分别为变量a和变量b对对象3的引用。是的,引用计数器的定义就是这么明了,用于表征用于指向同一个对象的引用的个数。通过变量间的赋值操作,自动的计算对象的引用计数。

那么,我们又会问引用计数器有啥用呢,为啥要多此一举来计算有多少个变量引用同一个变量呢,此时我们引出一个新的概念:对象的垃圾回收。

2 对象的垃圾回收机制

有一段代码:


a = 3
a = 'wali'
a = 3.1415926

我们会进一步思考,当我把a从指向整数对象3改变为指向字符串对象‘wali'时,那对象3发生了啥 ?难道一直放在内存里,如果对象非常大,那岂不是很占用内存,实际上Python设计者早就为我们考虑的很周全了:

Python中,每当一个变量名被赋予了一个新的对象,之前的那个对象空间就会被回收(前提为此对象没有被其他的变量名或对象所引用),这种自动回收对象空间的技术叫做垃圾回收。

这里如何判断何时回收,就得用到上一节所说的一个非常重要的概念,对象引用计数器,当计数器值为0标识无变量或对象引用,自动回收对象空间。到此,我们明白了对象引用计数器的重要作用,也理解了,除了我们看到的代码,Python也在默默的为我们做不少自动化的事情。

3 变量所指向的对象不同会有何不同?


#example 1
a = 3
b = a
a = 5 

我们回到上面的例子中,如果a发生变化,那么b会跟着发生变化吗?理论上指向同一个对象是会跟着发生变化的,但是这里的答案是不会,因为对象3是数字,不可变对象,所以只能重新创建一个新的对象5,然后a指向对象5,但是如果a所指向的对象是一个可变的对象,比如说列表,就会和我们想的一样b也会跟着发生变化,如下面的例子所示:


#example 2
a = [1,2,3]
b = a
a[0] = 3


L = a is b 
>>>True
M  =  a == b
>>>True

那么看下面的例子,例子2 和例子3 有什么区别呢?


#example 3
a = [1,2,3]
b = [1,2,3]
L = a is b
>>>False
M  =  a == b
>>>True

python中有两种方法检测变量是否相等,is 和 == ,其中==是判断变量所指向的对象的值是否相等,is是判断对象的同一性,如果两个变量精确的指向同一对象,is操作符才会返回True,也可以理解为is操作符,是比较实现引用的指针是否相同,例子2中变量a和变量b指向同一个对象,所以L和M都是True,但是例子三中变量a和变量b指向不同的对象,所以才会出现例子3下面的L和M的值的不一样的情况~但是如果下面的例子又会出现不同的结果:


#example 4
a = 3
b = 3
L = a is b
>>>True
M  =  a == b
>>>True

#example 5
c = [1,2,3]
K = c[2] is a
>>>True

是为什么呢?因为3 为不可变对象,为了节省内存消耗,只会保留一份,不管有多少个引用指向对象3,对象3都只有一份,例子5也很好的证明了这一点~

例子4和例子5中变量和对象的引用关系

课外小知识:

(1)可变类型,值可以改变:主要包括list列表,dict字典;不可变类型,值不可以改变:主要包括:数值类型intlongboolfloat,字符串str,元组tuple

在例子3中变量a和b的所指向的对象为可变对象,并且a和b的地址不一样,但是a和b中的元素所指向的对象其实是一样的,如下图所示

到此这篇关于Python中的变量赋值的文章就介绍到这了,更多相关Python变量赋值内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Python中的变量赋值

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Python中的变量怎么赋值

这篇文章主要讲解了“Python中的变量怎么赋值”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python中的变量怎么赋值”吧!1 Python变量概述变量,英文叫做 variable。在《
2023-06-22

python中变量的声明和赋值

1、什么是变量?    变量:值会发生变化的的量,与常量相对.2、python支持的变量数据类型:    Python有五个标准的数据类型:1. 数字    2.字符串    3.元组    4.列表    5.字典3、python中的变量
2023-01-31

图解Python变量与赋值

Python是一门独特的语言,与C语言有很大区别,初学Python很多萌新表示对变量与赋值不理解,学过C的都知道,给变量赋值时,需要先指定数据类型,同时会开辟一块内存区域,用于存储值,例如:int a = 1;a 就是内存空间中的一小块区域
2023-01-31

python如何给变量赋值

python可以通过基本的变量赋值、多重赋值、增量赋值、复合赋值运算符和全局变量和局部变量赋值。详细介绍:1、基本的变量赋值步骤是将数字赋给变量,将字符串赋给变量,将布尔值赋给变量,将列表赋给变量;2、多重赋值步骤是交换变量值,从函数返回多
python如何给变量赋值
2023-12-13

python变量和变量赋值的几种形式

动态类型的语言python是动态类型的语言,不需要声明变量的类型。实际上,python中的变量仅仅只是用来保存一个数据对象的地址。无论是什么数据对象,在内存中创建好数据对象之后,都只是把它的地址保存到变量名中。所以变量名是类型无关的,但它指
2023-01-30

python中的变量赋值格式有哪些

这篇文章主要讲解了“python中的变量赋值格式有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“python中的变量赋值格式有哪些”吧!1.Python 变量的概述:变量,英文叫做 Va
2023-06-22

深入理解Python中变量赋值的问题

前言 在Python中变量名规则与其他大多数高级语言一样,都是受C语言影响的,另外变量名是大小写敏感的。 Python是动态类型语言,也就是说不需要预先声明变量类型,变量的类型和值在赋值那一刻被初始化,下面详细介绍了Python的变量赋值问
2022-06-04

python中如何进行变量赋值计算

在Python中,可以使用等号(=)进行变量赋值计算。以下是一些示例:1. 简单赋值:```x = 5```2. 多重赋值:```x = y = z = 5```3. 增量赋值:```x += 5 # 等同于 x = x + 5```4.
2023-08-11

python中怎么把变量赋值为路径

在Python中,可以将变量赋值为路径的方法有多种,具体取决于你的需求和使用场景。以下是一些常见的方法:1. 使用字符串直接赋值为路径:```pythonpath = 'C:/folder/file.txt'```2. 使用原始字符串直接赋
2023-09-22

python的变量与赋值详细分析

python的变量与赋值1.变量的命名规则 变量其实通过一个标记调用内存中的值,而变量名就是这个标记的名称,但是万一这个标记已经被提前占用或者解释器认为这个标记是不合法的,那么就会报错。下面总结了一下变量的命名规则: 1.不能使用pytho
2022-06-04

python变量赋值的方法有哪些

Python中变量赋值的方法有以下几种:直接赋值:使用等号(=)将一个值赋给变量。例如:x = 5同时赋值:可以同时给多个变量赋值,用逗号分隔。例如:x, y, z = 1, 2, 3多重赋值:可以将一个序列(如列表或元组)的值同时赋给
python变量赋值的方法有哪些
2024-02-29

“:=”中的全局​​变量赋值行为

php小编小新将为大家介绍“:=”中的全局变量赋值行为。在早期版本的PHP中,全局变量的赋值需要通过使用关键字“global”来声明。然而,自从PHP 7.4版本引入了“:=”这个全局变量赋值的新语法,我们可以更加简洁地为全局变量赋值,省去
“:=”中的全局​​变量赋值行为
2024-02-09

python中怎么对多变量连续赋值

这篇文章主要介绍了python中怎么对多变量连续赋值,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。代码如下self.batch_size = batch_size = 128
2023-06-15

python中如何对多变量连续赋值

看到一段代码,如下self.batch_size = batch_size = 128初一看很诧异,仔细想想其实很合理的。 在python可能会需要同时声明多个变量,并对多个变量赋予相同的初始值,可以采用如下的方式赋值a=b=c=1但这里也
2022-06-02

怎么在python中批量创建变量并赋值

今天就跟大家聊聊有关怎么在python中批量创建变量并赋值,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。一,简单的情况:核心是exec函数,exec函数可以执行我们输入的代码字符串。
2023-06-15

怎么在python中判断全局变量的赋值

这篇文章将为大家详细讲解有关怎么在python中判断全局变量的赋值,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。python的五大特点是什么python的五大特点:1.简单易学,开发程序时,
2023-06-14

python变量赋值规范是什么

Python变量赋值的规范主要有以下几点:1. 变量名只能包含字母、数字和下划线,且不能以数字开头。2. 变量名不能包含空格和特殊字符(如@、#、$等)。3. 变量名区分大小写,例如"myVar"和"myvar"是两个不同的变量。4. 变量
2023-09-05

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录