003 Python中的变量 和 对象

前言:

    介绍了什么是变量,以及如何创建、赋值、取名。还有用示例来说明了Python的小整数对象池,以及深拷贝和浅拷贝。

    来源于课堂笔记,可能会有疏忽之处,敬请指正~!

一、变量Variable

1.什么是变量

1.    用来绑定数据对象的标识符。

2.    python程序在运行时,用来在内存中保存数据的量,该量是可以改变的

(变量保存在内存,程序与运行也在内存中;CPU和内存交互,数据最小单位是字节Byte)

3.    Python中 关联/绑定/引用的含义

              i.    变量没有数据类型,不存储数据,仅仅只是指向一个数据

             ii.    关联/绑定/引用都是指变量和一个对象的关联关系

4.    交互模式下查看变量的绑定关系:

              i.    Help(‘__main__’)

5.    变量必须先定义/创建,再使用;(变量是对象)


2.如何创建变量

1.    在第一次给它赋值时创建的;

2.    后来可以进行多次赋值,即为改变变量和对象的绑定关系

(没有覆盖之前的值对象,而是重新建立了新的绑定关系,有新的路线了);


3.如何给变量赋值

变量名 =

变量名

是按照规则任取的

=

是赋值运算符

是对象

例: A = 10

这是赋值语句,赋值结果是:把变量A和对象10进行绑定

A 和 10,都是对象,一切皆对象

内存中需要有对象10吗?

需要

需要在内存中创建变量吗?

要创建

还有什么动作?

把A和10绑定(暂时理解为,通过变量找到值/对象;是单向的)

例 : A = 10      B = 10

A 和 B 的id是一样,都是10的id

一个变量只能绑定一个对象

两个变量可以同时绑定同一个对象


4.如何给变量取名

a)    变量名开头:只能字母或下划线;

b)   变量名:由字母、下划线或数字构成;

c)    变量名:区分大小写(大小写敏感);

d)   不允许使用python关键字取名;(python解释器预留一些英文词组,有特殊含义或作用)(and else 。。。)

e)    建议:变量命名遵循python的PEP 8规则


5.赋值语句

Variable= expression

Variable1= variable2 = expression

Variable1, variable2, … = 序列 (x,y=100,200)

1.    Variable1,variable2,variable3,。。。 = 对象1,对象2,。。。

2.    Variable1,variable2,variable3,。。。 =( 对象1,对象2,。。。)

3.    Variable1,variable2,variable3,。。。 = [ 对象1,对象2,。。。]



二、小整数对象池

1.    CPython中整数-5到256永远存在于小整数池中,不会释放并可重复使用

2.    小整数对象池里面的id 不会变

3.    Python中的自动化内存管理

例:A = 10000

B = 20000

A = A + B   

#发生了什么事儿?

(A+B = 30000,将A重新绑定到30000,并回收10000 )

例:a = 5

b = 5

a is b               >>>返回True

(a b 直接从小整数池里面找5,不会重新创建对象;所以a、b绑定的是同一个对象)

三、深拷贝 和 浅拷贝

浅拷贝 shallow copy

 

是指在复制过程中,只复制一层变量,不会复制深层变量绑定的对象的复制过程

L= [ 3.1, 3.2 ]

L1 = [1, 2, L]

L2 = L1.copy( )

Print(L1)

Print(L2)

L[ 0 ] = 3.14

Print(L1)

Print(L2)

 

 

 

[1, 2, [ 3.1, 3.2 ] ]

[1, 2, [ 3.1, 3.2 ] ]

修改L,跟L1L2有啥关系??

[1, 2, [ 3.14, 3.2 ] ]   #L1 也被改变了

[1, 2, [ 3.14, 3.2 ] ]    #L2也被改变了

两个列表共用同一个列表L时,当这个列表L被改变后,之前的两个列表内容也会改变。

(因为列表的变量名、列表索引、列表元素对象是通过关系来进行绑定的,所以列表依赖于深层对象)

深拷贝 deep copy

 

对所有可变对象进行层层复制,实现对象的各自独立

Import copy #导入复制模块

L= [ 3.1, 3.2 ]

L1 = [1, 2, L]

L2 = copy.deepcopy(L1  #实现深拷贝

Print(L1)

Print(L2)

L[ 0 ] = 3.14

Print(L1)

Print(L2)

 

 

 

 

[1, 2, [ 3.1, 3.2 ] ]

[1, 2, [ 3.1, 3.2 ] ]

修改L,跟L1L2有啥关系??

[1, 2, [ 3.14, 3.2 ] ]   #L1 也被改变了

[1, 2, [ 3.1, 3.2 ] ]    #L2不受影响


猜你喜欢

转载自blog.csdn.net/weixin_37767152/article/details/80639066
今日推荐