变量存储在内存中的值。这就意味着在创建变量时会在内存中开辟一个空间。基于变量的数据类型,解释器会分配指定内存,并决定什么数据可以被存储在内存中。

1.变量的定义

js中需要用letconstvar关键字来声明,如在js定义一个局部变量let name = '张三'。 在java中定义变量需要声明变量的类型,go语言也一样。但是在python中变量定义不需要关键字声明,也不需要声明类型。

变量的命名规则:

>>> count = 100
>>> type(count)
<class 'int'>

>>> name = '张三'
>>> type(name)
<class 'str'>

>>> tu = (1,2,3,4)
>>> type(tu)
<class 'tuple'>

>>> li = [1,2,3,4,5]
>>> type(li)
<class 'list'>

>>> aset = {1,2,3,'hell'}
>>> type(aset)
<class 'set'>

>>> di = {'name':'张三','age':19}
>>> type(di)
<class 'dict'>

2.多个变量赋值

>>> a, b, c = 1, 2, "john"

>>> a, b, c = 1, 2, "john"

3.值类型和引用类型

值类型:对象本身不允许修改,数值的修改实际上是让变量指向了一个新的对象 包含:字符串、元组、数值,本身不允许被修改

引用类型:对象本身可以修改 包含:列表、字典,本身允许修改

值类型

>>> a = 1
>>> a +=2
>>> a
3

小伙伴在看了上面的定义,阅读了代码肯定就有疑问了,a变量中初始值是1,在自身加2后,变量a值变成了3,a的值发生了改变,怎么就不允许修改,这不明明改变了吗?针对小伙伴这个疑问,小菜用下面代码来解释一下

>>> a = 1
>>> id(a)
1471308976

>>> a +=2
>>> id(a)
1471309008

>>> a
3

小菜将上面代码重复了一遍,不同的是在每次运算完后添加了一行id(a)。在本小节开始的时候小菜记得写过变量存储在内存中的值。这就意味着在创建变量时会在内存中开辟一个空间。当我们定义一个变量a,python就会在内存中为变量a开辟一块内存空间,让变量a来存储值。id的作用就是打印变量a在内存中的地址,可以看到当a=1时,a在内存中的地址是1471308976,当我们在对a +=2时,a在内存中的地址1471309008。变量a在内存中的地址发生了改变。

过程演示 a = 1 为变量a分配内存空间,存储地址1471308976,存放值1, a +=2 重新分配一块内存,存储地址是1471309008,存放值3,内存释放原来a变量,将1471309008内存重新命名变量a

引用类型

>>> user = {'name':'张三','age':18}
>>> user['name'] = '王五'
>>> user
{'name': '王五', 'age': 18}

这样一看好像看不出和上面到底有什么区别,将上面代码改一下,打印一下它们在内存中的地址

>>> user = {'name':'张三','age':18}
>>> id(user)
6150160

>>> user['name'] = '王五'
>>> id(user)
6150160

>>> user
{'name': '王五', 'age': 18}

这样看着就明白许多了,变量user修改前后在内存中的地址都是6150160,没有发生改变。值类型引用类型的本质区别就是对象的本身是否可以被修改。小菜在下面写一个例子

值类型的例子

>>> a = 1
>>> b = a
>>> a = 2

>>> a
2 
>>> b
1

引用类型的例子

>>> auser = {'name':'张三','age':19}
>>> buser = auser
>>> auser['name'] = '隔壁老王'

>>> auser
{'name': '隔壁老王', 'age': 19}
>>> buser
{'name': '隔壁老王', 'age': 19}

值类型引用类型最基本的分别在复制之后的结果。当一个值类型被复制的时候,相当于创造了一个完全独立的实例,这个实例保有属于自己的独有数据,数据不会受到其他实例的数据变化影响

值类型就好像身份证复印件一样,复印出来之后,修改原件上面的内容,复印件上的内容不会变。复制一个引用类型的时候,实际上是默默地创造了一个共享的实例分身,两者是共用一套数据。因此修改其中任何一个实例的数据,也会影响到另外那个。

python3.7 入门教程

Python 准备工作(1) Python 基本数据类型 Number(2) Python 字符串 str(3) Python 列表List(4) Python 元组tuple(5) Python 集合set(6) Python 字典 dict(7) Python 变量(8) Python 运算符(9) Python 条件语句(10) Python 循环语句(11) Python 包 模块(12) Python 函数一(13) Python 函数二(14) Python 面向对象(15) Python 正则(16) Python json(17) Python 枚举(18) Python 闭包(19) Python 装饰器(20) Python 杂记(21) Python with(22)