一. 什么是变量

变量就是以前学习的数学中常见的等式x = 3(x是变量,3是变量值),在编程中,变量不仅可以是数学,还可以是任意数据类型

二. 变量的命名规则

变量名必须是英文大小写、数字和_的组合,不能以数字开头,不能是关键字

a            ✔

_name        ✔

Atest1       ✔

1a           ✘

那么,如何查看python中的关键字呢?

#导入模块
import keyword

#打印关键字列表
print(keyword.kwlist)

结果:
['False', 'None', 'True', 'and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield']

三. 变量、对象和引用

在python中,一切都是对象,一切都是对象的引用

举个最简单的例子:

a = 3

如图所示,python将执行三个步骤来完成a = 3的赋值操作:

1. 创建也变量a

2. 创建一个对象(分配一块内存),来存储值3

3. 将变量与对象,通过指针连接起来,从变量到对象的连接称之为引用(变量引用对象)

四. 类型属于对象,而非变量

在python中,我们无需事先声明变量的类型,变量类型是在运行过程中根据对象的类型自动决定的。

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

a = 3                      #整型
a = 'spam'                 #字符串
a =  1.2.3                 #浮点型

在上面的例子中,a开始是一个整数,然后变成一个字符串,最后变成一个浮点数。看起来,a的类型发生了三次改变。

事实上,在python中,变量没有类型,类型是属于对象的。就像前面所说,a = 3,是变量a引用了对象3,而以上三条语句,实际上是变量a引用了不同类型的对象。

那么,对象的结构又是什么样的?

如下图所示,每个对象都包含了两个头部信息,一个是类型标志符,另一个是引用计数器。类型标志符标记了这个对象的类型,例如整数对象3,包含了值3和一个类型标志符(严格意义上,它是一个指向int的对象的指针),这就告诉python,这是一个整数对象。而'spam'字符串对象的标志符指向了一个字符串类型。由于对象记录了它们的类型,变量的类型就没有必要了。

五. 对象的垃圾回收

当变量a重新赋值时,它的前一个引用会发生什么变化呢?

a = 3
a = 'spam'

答案是,当变量a重新赋值给字符串'spam'时,它的上一个引用对象3马上被回收了,对象的空间自动放入自由内存空间池,等待后来的对象使用。

在python内部是这样实现这一功能的:它在每个对象内部分配了一个计数器,计数器记录了当前指向该对象的引用的数目,一旦这个计算器被设置为0(即这个对象没有被任何变量引用),该对象的内存空间就会自动回收。这种自动回收对象空间的机制就叫垃圾收集,它的最大好处是,可以再脚本中任意使用对象而不需要考虑释放内存空间,在程序运行时,python将会清理那些不再使用的空间。

python中的变量与对象的更多相关文章

  1. Python中的变量引用对象需注意的几点

    Python中的变量引用对象需注意的几点 分类:Python (55)  (0) 普通引用: Python中,变量的作用仅仅是一个标识,只有赋值后才被创建,它可以引用任何类型的对象,而且在引用之前必须 ...

  2. Python中的变量、对象

    由于没时间系统学习下Python 只能见一个问题探究一个问题了 一.初级 - 对象 关于Python中的数据类型,今天重新认识了下.[参考] 首先,Python中,对象才有类型, 变量是没有类型的,它 ...

  3. python学习(九)python中的变量、引用和对象的关系

    <Think In Java>中说到过"万事万物皆对象",这句话也可以用在Python中. 感觉Python中的变量有点像Javascript中的变量,是弱类型的,但是 ...

  4. python中的变量和数据类型

    一.变量定义:变量是计算机内存中的一块区域,存储规定范围内的值,值 可以改变,通俗的说变量就是给数据起个名字. 二.变量命名规则: 1. 变量名由字母.数字.下划线组成 2. 数字不能开头 3. 不可 ...

  5. Python中的变量、引用、拷贝和作用域

    在Python中,变量是没有类型的,这和以往看到的大部分编辑语言都不一样.在使用变量的时候,不需要提前声明,只需要给这个变量赋值即可.但是,当用变量的时候,必须要给这个变量赋值:如果只写一个变量,而没 ...

  6. 第二章python中的一切皆对象

    1.函数和类也是对象,属于python的一等公民 赋值给一个变量 可以添加到集合对象之中 可以作为参数传递给函数 可以当作函数的返回值 def ask(name="ask_wzh" ...

  7. python中的一切皆对象

    python中一切皆对象是这个语言灵活的根本.函数和类也是对象,属于python的一等公民.包括代码包和模块也都是对象.python的面向对象更加彻底. 可以赋值给一个变量可以添加到集合对象中可以作为 ...

  8. Python中的不可变对象类型与可变对象类型

    https://blog.csdn.net/answer3lin/article/details/86430074 其实各个标准资料中没有说明Python有值类型和引用类型的分类,这个分类一般是C++ ...

  9. python中的变量引用小结

    python的变量都可以看成是内存中某个对象的引用.(变量指向该内存地址存储的值) 1.python中的可更改对象和不可更改对象 python中的对象可以分为可更改(mutable)对象与不可更改(i ...

随机推荐

  1. Oracle中索引名称的唯一性

    数据库索引处理是遇到的一点问题,简单记录下 oracle的规定,在同一个SCHEMA下的对象是不能用相同的名字命名的,一般创建索引名用“表名_字段名”,这样能很快知道这个索引,是属于哪个表的. col ...

  2. 解决Vue的表格中,expand只有某些行需要展开的问题。

    element UI里的表格里,type="expand"的话,所有行都有展开的选项,然而实际中有些行根据判断不需要展开,而element目前对这个问题还不是很友好,现在有个可以通 ...

  3. MySQL中事务的分类

    从事务理论的角度来看,可以把事务分为以下几种类型 扁平事务(Flat Transactions) 带有保存点的扁平事务(Flat Transactions with Savepoints) 链事务(C ...

  4. MySQL事件的先后

    今天闲聊之时 提及MySQL事件的执行,发现一些自己之前没有注意的细节 如果在执行事件过程中,如果insert的存储过程发生意外 会如何 USE iot2; CREATE TABLE aaaa (ti ...

  5. JavaWeb—监听器Listener

    1.简介 Listener是Servlet的监听器,Servlet 监听器用于监听一些重要事件的发生,监听器对象在事情发生前.发生后可以做一些必要的处理. JavaWeb里面的listener是通过观 ...

  6. Solr schema.xml中修改id的类型为int

    使用solr6的版本的时候(solr5不存在这个问题),在修改schema.xml的field时,想使用int做为id的数据类型,修改后重新加载配置的时候报错.原来schema.xml中field i ...

  7. Maven- 使用Maven构建一个可执行jar

    How to Create an Executable JAR with Maven 1.最重要的是使用jar类型,<packaging>jar</packaging>.当然不 ...

  8. python常用模块——random模块

    参考博客:http://www.360doc.com/content/14/0430/11/16044571_373443266.shtml 今天突然想起python该怎么生成随机数?查了一下,贴出实 ...

  9. Django 项目补充知识(JSONP,前端瀑布流布局,组合搜索,多级评论)

    一.JSONP 1浏览器同源策略 通过Ajax,如果在当前域名去访问其他域名时,浏览器会出现同源策略,从而阻止请求的返回 由于浏览器存在同源策略机制,同源策略阻止从一个源加载的文档或脚本获取或设置另一 ...

  10. iOS 当公司有人向你提问,你该如何应对?

    今天 因为iOS 开发的内部版本号耿耿于怀好久,释然后让我有了一个新想法:从前,能让我兴奋的点是解决一个有一个拗脑筋的问题,见大部分博客便知,都是技术方面的积累. 那么从今天起我决定让自己有个新起点, ...