纯净、安全、绿色的下载网站

首页|软件分类|下载排行|最新软件|IT学院

当前位置:首页IT学院IT技术

Python变量 浅谈对Python变量的一些认识理解

软件技术学习开发爱好者   2021-05-17 我要评论
想了解浅谈对Python变量的一些认识理解的相关内容吗软件技术学习开发爱好者在本文为您仔细讲解Python变量的相关知识和一些Code实例欢迎阅读和指正我们先划重点:Python变量类型,python变量的实现下面大家一起来学习吧。

一、Python变量

在大多数语言中为一个值起一个名字时把这种行为称为“给变量赋值”或“把值存储在变量中”。不过Python与许多其它计算机语言的有所不同它并不是把值存储在变量中而像是把名字“贴”在值的上边(专业一点说法是将名字绑定了对象)。所以有些Python程序员会说Python没有变量只有名字通过名字找到它代表的值。

 Python中的变量与其它开发语言(如C语言)的不同:

在C语言中变量类似于一个“容器”赋给它的值装在容器中:

定义一个变量 int a = 1;

给变量a重新赋值 a = 2;

把变量a赋值给另外一个变量b int b = a;

会重新创建一个变量b(容器)将a中的内容复制粘贴至b中。

在python变量类似于名字标签“贴”在值上面通过名字找到它代表的值。

定义一个变量 a = 1

给变量a重新赋值 a = 2

把变量a赋值给另外一个变量b b = a

创建新的便利贴b与a同时贴到值上

为了对python中变量的这种情况加深认识下面适度展开介绍。

1.1 第一点

先说明第一点:变量的实现方式有:引用语义、值语义

python语言中变量的实现方式就是引用语义在变量里面保存的是值(对象)的引用(值所在处内存空间的地址)。采用这种方式变量所需的存储空间大小一致因为其中只需要保存一个引用。而有些语言(例如c)采用的不是这种方式它们把变量直接保存在变量的存储区里这种方式就称为值语义。这样的话一个整数类型的变量就需要保存一个整数所需要的空间(例如c语言中int类型占用4个字节大小)。

python中变量与对象的引用关系类似于c语言的指针变量与指向地址之间的关系。

在python的数据结构中对象分为可变对象和不可变对象。基本数据类型如int、float元祖tuple、str是不可变对象;list(列表)、dict(字典)、set(集合)是可变对象可变对象存储的元素的引用其实是没有改变的改变的是其引用指向的值。

采用引用语义存储的只是一个变量的值所在的内存地址而不是这个变量的值本身。

1.2 第二点

现在说明第二点:Python中的变量、对象、引用三者之间的关系。

在Python里一切皆对象。Python中对象具有三要素:标识(identity)、类型(type)、值(value)。

☆标识(identity):

用于唯一标识对象通常对应对象在计算机内存中的地址。使用内置函数id(obj)返回对象唯一标识。

☆类型(type):

类型可以限制对象的取值范围和可执行的操作。使用内置函数type(obj)返回对象所属类型。

对象中含有标准的头部信息:类型标识符。标识对象类型表示对象存储的数据的类型。

每一个对象都有两个标准的头部信息:

1.类型标识符去标识对象的(数据)类型;

2.引用计数器记录当前对象的引用的数目。

(回收机制:变量的引用计数器为0自动清理。 ※ 较小整数型对象有缓存机制。)

☆值(value):

表示对象存储的数据的信息。使用内置函数print(obj)可以直接打印值。

Python中变量用来指向任意的对象是对象的引用。Python变量更像是指针(或者说Python变量更像“贴签”)而不是数据存储区域(而不是数据“容器”)。

Python 中的变量不是装有对象的“容器”而是贴在对象上的“标签”——给一个变量赋值把这个标签贴到一个对象上重新赋值是撕下标签贴到另一个对象上。

在python中变量保存的是对象(值)的引用采用这种方式变量的每一次初始化都开辟了一个新的空间将新内容的地址赋值给变量。id()函数可以获取变量在内存中的地址。我们把不同的值赋给变量时候地址发生变化相同的值地址不发生变化。下面给出示例:

【顺便提示:id()的值不是固定不变的——此值系统为对象分配的内存地址在你练习时显示的不同值是正常的。】

下面是字符串的示例:

在Python中值可以放在内存的某个位置(地址)变量用于引用它们给变量赋一个新值原值不会被新值覆盖变量只是引用了新值。顺便说明Python的垃圾回收机制会自动清理不再被用到的值所以不用担心计算机内存中充满被“丢弃”的无效的值。

1.3 第三点

现在说明第三点:可变(mutable) 类型对象、不可变(immutable) 类型对象

可变类型对象指对象可以在其 id() 保持固定的情况下改变其取值。

不可变类型对象指具有固定值的对象。不可变对象包括数字(numbers)、字符串(strings)和元组(tuples)。这样的对象不能被改变。如果必须存储一个不同的值则必须创建新的对象。不可变对象不允许对自身内容进行修改。如果我们对一个不可变对象进行赋值实际上是生成一个新对象再让变量指向这个对象。哪怕这个对象简单到只是数字 0 和 1。

由于 Python 中的变量存放的是对象引用所以对于不可变对象而言尽管对象本身不可变但变量的对象引用是可变的。运用这样的机制有时候会让人产生糊涂似乎可变对象变化了。如下面的代码:

i = 73 

i += 2

不可变的对象的特征没有变依然是不可变对象变的只是创建了新对象改变了变量的对象引用。参见下图:

对于可变对象其对象的内容是可以变化的。当对象的内容发生变化时变量的对象引用是不会变化的。如下面的例子。

m=[5,9] 

m+=[6]

参见下图:

二、总结

Python变量指的是名字绑定了对象(绑定就是将一个对象与一个名字联系起来)。

绑定时变量就是名字。

使用时变量代表对象的引用。

变量改变的只有绑定关系。

深入学习:

https://docs.python.org/zh-cn/3.9/reference/datamodel.html#objects-values-and-types

补充说明:

对复杂的数据类型(列表、集合、字典)如果添加某一项元素或者添加几个元素不会改变其本身的地址只会改变其内部元素的地址引用但是如果对其重新赋值时就会重新赋予地址覆盖就地址这时地址就会发生改变。示例代码如下:

list_ = [1,2,3,4]
print(list_, id(list_))
list_.append(5)
print(list_, id(list_))
#如上代码因为append前后的list_仍然是同一个对象只是对象的值发了改变所以地址不变。
 
#再如下面的代码
print(list_, id(list_), id(list_[1]))#打印列表、列表的地址、第二个元素的地址
list_[1] = 'aaa'   #修改列表
print(list_, id(list_), id(list_[1]))#打印列表、列表的地址、第二个元素的地址
#不难发发现:列表变了、列表的地址没有变、列表内部元素变了、列表内部元素的地址变了

测试运行如下图所示:


相关文章

猜您喜欢

  • uniapp使用mqtt 怎样在uniapp项目中使用mqtt

    想了解怎样在uniapp项目中使用mqtt的相关内容吗Merryan在本文为您仔细讲解uniapp使用mqtt的相关知识和一些Code实例欢迎阅读和指正我们先划重点:uniapp使用mqtt,uniapp项目使用mqtt下面大家一起来学习吧。..
  • python3 goto跳转指定代码行 python3 怎样使用 goto 跳转执行到指定代码行

    想了解python3 怎样使用 goto 跳转执行到指定代码行的相关内容吗yuanteng8在本文为您仔细讲解python3 goto跳转指定代码行的相关知识和一些Code实例欢迎阅读和指正我们先划重点:python3,goto,跳转执行,指定代码行下面大家一起来学习吧。..

网友评论

Copyright 2020 www.Musicdownload3mp.com 【飞音下载站】 版权所有 软件发布

声明:所有软件和文章来自软件开发商或者作者 如有异议 请与本站联系 点此查看联系方式