广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Python变量类型及变量引用
  • 783
分享到

Python变量类型及变量引用

变量类型Python 2023-01-31 01:01:07 783人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

二、变量的类型        python 不包含像 int 这样的简单类型 —— 只有对象类型, 如果 Python 中需要整数值,将整数赋值给相应变量(如i = 100 )即可。在后台,Python 将创建一个整数对象,并将对新对象的引

二、变量的类型

 

       python 不包含像 int 这样的简单类型 —— 只有对象类型, 如果 Python 中需要整数值,将整数赋值给相应变量(如i = 100 )即可。在后台,Python 将创建一个整数对象,并将对新对象的引用赋值给变量。

 

        问题的关键是:Python 是一种动态类型化语言,所以无需声明变量类型。事实上在单个程序中,变量的类型是可以改变(多次)的。

 

        Python的对象类型,大致可以分为四类。

 

  • 简单类型 —— 基本构建块,bool、intfloat 和complex

  • 容器类型 —— 保存其他对象。

  • 代码类型 —— 封装 Python 程序的元素。

  • 内部类型 —— 程序执行期间使用的类型。


——————————————————————————————————————————

Python 的变量是没有类型的,这与以往看到的大部分语言都不一样。但 Python 却是区分类型的,那类型在哪里呢?事实是,类型是跟着内存中的对象走的。Python 的所有变量其实都是指向内存中的对象的一个指针,所有的变量都是!此外,对象还分两类:一类是可修改的,一类是不可修改的。

 

现在,我插入在此先说说函数参数的问题,我们有下面一个实验:

def func1(a): a += 1

def func2(a): a[0] = 0

t1 = 0

func1(t1)

print t1

t2 = [1, 2, 3]

func2(t2)

print t2

结果是:

0

[0, 2, 3]

 

看看结果会不会很惊异?第一个看起来像传值,第二个看起来却像传引用?看到这里你是不是觉得 Python 是一种莫名其妙的语言?其实当时我也有这种想法……但 Python 果然没哟让我失望,它如同 UNIX 一样,一开始设计得就如此优美。继续往下看~

 

不可修改的对象是我们最常用和最熟悉,几乎在任何一个语言中都能看到的——整数、实数、字符串和元组。有人说,怎么不可变啊?我随便给他们赋值!是的,在 Python 里几乎一切都是可以改变的,甚至有人说“如果你愿意,None 的值也是可以变的”(当然我不知道怎么变……)。但是如果注意观察,会发现所谓的改变其实是——扔了旧的建个新的!验证这个的实验很简单:

 

不可变对象

a = 1

print id(a)

a += 1

print id(a)


类似的实验想怎么做怎么做,只要那两个是不可变对象,你就一定会发现 id 变了!为什么?因为对象不可变。那什么可变?变量的引用是可变的!

好,那么自然剩下的就是可变的对象了,上面的实验亦可以很容易的证实字典、列表、集合和类实例等对象是可变的。那么,这意味着什么呢?


可变对象

>>> a = [[1, 2, 3], [4, 5, 6], 15]

>>> print id(a)

24866984

>>> a[1][2] = 10

>>> print a

[[1, 2, 3], [4, 5, 10], 15]

>>> print id(a)

24866984

 

下面,我们回到函数传值的问题。我们知道了可变对象和不可变对象的区别,不是吗?对于可变对象,对于对象的操作不会重建对象,而对于不可变对象,每一次操作就重建新的对象。那么函数参数到底是个什么东西呢?其实说白了也简单,就是把参数里传入的东西对相应对象的引用依次赋给对应的内部变量(有点晕吗?)。看看第一个实验,有没有明白些什么?其实都是将一个指向对象的引用传个一个名为“参数”的本地变量,所以 func1 中给 a 的是一个值为 0 的整数对象的引用,但我们知道,整数对象是不可变的,所以当 func1 对 a 进行修改的时候,实际上是修改本地变量 a 的引用到一个新的值为 1 的整数对象的引用。那么很显然,func2 修改的是一个可变的对象,也就是说即使 func2 修改了 a,本地变量 a 和全局变量 t2 指向的还是同一个对象,虽然他们不是同一个变量!这样一切情况都明了了,不是么?不明了的话再看看下面这个实验:

 

a = [[1, 2, 3], [4, 5, 6]]

b = a[0]

b[0] = 0

print a

输出一定是:

[[0, 2, 3], [4, 5, 6]]

其实原理和参数的传递是一致的。

 

我们下面来看看全局变量和本地变量的问题。如果一个函数里面使用了一个变量,那么 Python 会先看看有没有对应的本地变量,如果没有找到,但找到一个全局变量,那么 Python 会把那个全局变量的引用赋给一个新的本地变量。所以,现在在函数里的那个变量和全局变量其实不是同一个变量,他们只不过暂时有了相同的引用。这样其实可以看作 Python 为你做了隐式的参数传递。因此我们发现,他和参数一样,传值传引用表面上看过去漂移不定。那么如何修改一个指向不可变全局变量的值呢?靠返回值显然不那么优美。好在 Python 像 PHP 那样提供了一个叫 global 的语法,被 global 的变量使得本地变量成为相应全局变量的一个别名,也就是说这个语句使他们成为同一个变量,这一点很重要!

 

现在看到了 Python 优美的设计。那下面的问题是,如果我们一定要复制一个可变对象的副本怎么办?简单的等号赋值显然被证明无效了。Python 也提供了方法——copy 模块。copy 模块是每一个 Python 都有的,专门用于生成可变对象的副本。copy 模块中有两个函数:copy.copy 和 copy.deepcopy。其中 copy 叫做潜复制,它仅仅复制了第一你给它的东西,下面的不管了。而 deepcopy 叫做深复制,它将所有能复制的都复制了。这样说比较抽象,我们来看下面实验:

 

a = [[1, 2, 3], [4, 5, 6]]

b = a

c = copy.copy(a)

d = copy.deepcopy(a)

a.append(15)

a[1][2] = 10

print a

print b

print c

print d

输出结果:

 

[[1, 2, 3], [4, 5, 10], 15]

[[1, 2, 3], [4, 5, 10], 15]

[[1, 2, 3], [4, 5, 10]]

[[1, 2, 3], [4, 5, 6]]


--结束END--

本文标题: Python变量类型及变量引用

本文链接: https://www.lsjlt.com/news/183580.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

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

下载Word文档
猜你喜欢
  • Python变量类型及变量引用
    二、变量的类型        Python 不包含像 int 这样的简单类型 —— 只有对象类型, 如果 Python 中需要整数值,将整数赋值给相应变量(如i = 100 )即可。在后台,Python 将创建一个整数对象,并将对新对象的引...
    99+
    2023-01-31
    变量 类型 Python
  • Python变量类型
    python3支持3种不同的数值类型1.int类型有符号整数,就是C语言中所指的整型,也就是数学中的整数,它的大小与安装的解释器的位数有关查看当前系统下的Int最大值打开windows下的idle编辑器(安装完python3后自带)pyth...
    99+
    2023-01-30
    变量 类型 Python
  • Python 变量类型
    变量赋值Python中的变量不需要声明,变量的赋值操作既是变量声明和定义的过程。每个变量在内存中创建,都包括变量的标识,名称和数据这些信息。每个变量在使用前都必须赋值,变量赋值以后该变量才会被创建。等号(=)用来给变量赋值。等号(=)运算符...
    99+
    2023-01-31
    变量 类型 Python
  • 005-Python 变量类型
    Python 变量类型    变量存储在内存中的值。这就意味着在创建变量时会在内存中开辟一个空间。基于变量的数据类型,解释器会分配指定内存,并决定什么数据可以被存储在内存中。因此,变量可以指定不同的数据类型,这些变量可以存储整数,小数或字符...
    99+
    2023-01-31
    变量 类型 Python
  • JavaScript变量类型及变量之间如何转换
    本篇内容介绍了“JavaScript变量类型及变量之间如何转换”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成...
    99+
    2022-10-19
  • python定义变量类型
    目录定义变量什么是变量?变量的定义?标识符(命令规范)命名原则变量的类型不同类型变量之间的计算变量的输入变量的格式化输出变量赋值删除变量常量定义定义变量 什么是变量? 在程序运行过程中,其值可以改变的量 变量的定义?...
    99+
    2022-06-02
    python 变量 Python定义变量
  • python查看变量类型
    使用type函数 示例如下 >>> aList=[1,2,3,4,5] >>> type(aList) <class 'list'> ...
    99+
    2023-01-31
    变量 类型 python
  • Python文件类型,变量及字符串
    1. 文件类型:(1)源代码:    vim test.py    #!/usr/bin/python    print 'hello world!'运行方法1:    [root@localhost python]# python tes...
    99+
    2023-01-31
    字符串 变量 文件类型
  • JavaScript变量类型以及变量作用域的示例分析
    这篇文章主要介绍JavaScript变量类型以及变量作用域的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!变量类型ECMAScript变量可能包含两种不同类型的数据值:基本类...
    99+
    2022-10-19
  • 变量类型-List
    教程:一:列表的创建    List(列表) 是 Python 中使用最频繁的数据类型。列表中元素的类型可以不相同,数字,字符串甚至可以包含列表(所谓嵌套)    (1)List写在方括号之间,元素用逗号隔开    (2)和字符串一样,l...
    99+
    2023-01-30
    变量 类型 List
  • 变量类型-String
    教程:一:字符串的创建    用单引号、双引号括起来,同时用转义字符转义二:字符串的索引    变量[头标:尾标]    从前到后:0---end    从后到前:-1---->-len(str)三:获取字符串的索引序号    st...
    99+
    2023-01-30
    变量 类型 String
  • 变量类型-Number
    教程:一:数字类型    (1)int 没有限制大小,有以下的四种表现形式:        1:2进制:以'0b'开头---bin        2:8进制:以'0o'开头---oct        3:10进制:正常显示----int ...
    99+
    2023-01-30
    变量 类型 Number
  • 变量类型-Set
    教程:    集合是一个无序不重复元素的序列,它的特点是:有的可变,有的不可变,元素无序不可重复!一:集合的创建    (1)使用花括号        set={value1, values2}                注意创建一个空...
    99+
    2023-01-30
    变量 类型 Set
  • 变量类型-Dict
    教程:一:字典的创建        1:字典的介绍------>d = {key1:value1, key2:values2}    (1)dictionary(字典) 是 Python 中最有用的数据类型。字典是无序的对象集合  ...
    99+
    2023-01-30
    变量 类型 Dict
  • 变量类型-Tuple
    教程:一:元组的创建        元组(tuple)与列表类似,不同之处在于元组的元素不能修改    (1)tuple写在圆括号之间,元素用逗号隔开    (2)元组元素的类型可以不同    (3)一个元素,需要在元素后添加逗号tup ...
    99+
    2023-01-30
    变量 类型 Tuple
  • Java 变量类型及其实例
    在Java语言中,所有的变量在使用前必须声明。声明变量的基本格式如下:type identifier [ = value][, identifier [= value] ...] ;格式说明:type为Java数据类型。identifier...
    99+
    2023-05-31
    java 变量 ava
  • Python中判断变量类型
    Python中判断变量类型 在Python中,判断变量的类型是一项常见的任务。通过了解变量的类型,我们可以根据需要执行不同的操作,从而实现更灵活的编程。下面我们将介绍几种常用的方法来判断变量的类型,并...
    99+
    2023-10-24
    python 开发语言 Python
  • python学习之变量类型
    变量:  变量是保存在内存中的值,根据变量类型开辟不同的内存空间且只允许符合该数据类型的数据才可以被存储在该内存空间中变量赋值:在Python中定义变量时,无需像其他语言一样需要声明数据类型。每个变量在内存中创建的时候都会包含变量的标识、名...
    99+
    2023-01-30
    变量 类型 python
  • python变量与数据类型
                          Python(变量与数据类型)这里就不说python历史了,可以去网上查看访问python 官网下载python安装python https://www.python.org/ 按照上面图片选择系...
    99+
    2023-01-31
    变量 数据类型 python
  • JavaScript变量类型有哪些及变量间的转换方法
    这篇文章主要介绍“JavaScript变量类型有哪些及变量间的转换方法”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“JavaScript变量类型有哪些及变量间的转换方法”文章能帮助大家解决问题。1....
    99+
    2023-06-29
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作