Python基础(4) - 变量


Python

命名规则:

变量名必须是字母或者_开头。

变量名的其他部分可以是字母,_或者数字。

Python是大小写敏感的。

以下划线开头的标识符是有特殊意义:

以单下划线开头(_foo)的代表不能用“from xxx import *”而导入;

以双下划线开头的(__foo)代表类的私有成员;

以双下划线开头和结尾的(__foo__)代表python里特殊方法专用的标识,如__init__()代表类的构造函数,供解释器使用。

变量声明和赋值:

在Python中变量是不需要声明的。变量通过首次赋值产生, 当超出作用范围时自动消亡。

X = 1

该赋值在Python中是如何进行的?

赋值的过程:

1、在内存中创建对象1。

2、创建变量名X。

3、把变量和对象建立映射关系。

在赋值时,是把对象的引用赋值给变量而不是值。

变量可以引用任何类型的对象。变量没有类型,只有对象有类型。

变量在使用前必须被赋值。

在Python中可以一次赋多值。

>>> (Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday) = range(7)
>>> Monday
0
>>> Thursday
3
>>> Sunday
6

Python可以轻松的交换两个变量的值:

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

Python中可以多重赋值:

>>> x=y=z=1
>>> x
1
>>> y
1
>>> z
1
>>>

增量赋值

x = x + 1 可以写成为 x += 1

对于不可变对象,A = A+ B与 A+= B结果是一样的(分配一个新对象)

对于可变对象,可变对象会被就地修改。

>>> x=1
>>> y=x
>>> x+=2
>>> x
3
>>> y
1
>>>
>>> l = [123,'xyz']
>>> ll = l
>>> l += [456]
>>> l
[123, 'xyz', 456]
>>> ll
[123, 'xyz', 456]
>>>

理解引用:

Python把一块数据存储在对象中,变量是对象的唯一引用;它们是计算机内存中特殊地点的名字。所有对象都具有唯一的身份号、类型和值。对象的类型不会改变,对于可变类型而言,它的值是可变的。id(obj)函数可用于检索对象的身份,也就是内存中的对象的地址。

每个对象都包含引用计数器,它记录当前有多少个变量正在引用该对象。当给对象指定一个变量或使对象成为列表或其它包容器的成员时,引用计数就增加;当从包容器中撤消、重新分配或删除对象时,引用计数减少。当引用计数达到0值时(即没有任何变量引用这个对象),python的回收机制会自动回收它使用的内存。注意,del可用来删除变量,但不能删除对象。

sys.gettrefcount(obj)函数可返回给定对象的引用计数。

浅拷贝和深拷贝:

通过给列表分配一个变量能创建对列表的引用,如果要创建列表的副本就要理解浅副本和深副本的概念。

1 列表或其他包容器对象的浅副本(Shallow)能够生成对象本身的副本,但也会创建对由列表包含的对象的引用。可用分片(object[:])和copy模块的copy(obj)函数创建。

2 列表或其他对象包容器对象的深副本能够生成对象本身的副本,并递归地生成所有子对象的副本。可用copy模块的deepcopy(obj)函数创建。

比较两种副本,一般情况下表现一样,但当列表内包含另一个列表的情况下,父列表的浅副本将包含对子列表引用,而不是独立副本。其结果是,当更改内部列表时,从父列表的两个副本中都可见,如:

>>> a = [1,2,3,[4,5]]
>>> b=a
>>> id(a)
31246216
>>> id(b)
31246216
>>> id(a[3])
31206496
>>> id(b[3])
31206496
>>> c = a[:]
>>> id(c)
31244456
>>> id(c[3])
31206496
>>> a[3].remove(4)
>>> a
[1, 2, 3, [5]]
>>> b
[1, 2, 3, [5]]
>>> c
[1, 2, 3, [5]]
>>>
>>> a = [1,2,3,[4,5]]
>>> import copy
>>> b = copy.deepcopy(a)
>>> b
[1, 2, 3, [4, 5]]
>>> id(a)
31085992
>>> id(b)
31248792
>>> id(a[3])
31244536
>>> id(b[3])
31249592
>>> a[3].remove(4)
>>> a
[1, 2, 3, [5]]
>>> b
[1, 2, 3, [4, 5]]
>>>

优质内容筛选与推荐>>
1、【基础】如何判断用户搜索输入的关键字是几个词构成?
2、NFS企业级网络文件共享
3、Java学习02
4、sinc函数
5、iOS项目之模拟请求数据


长按二维码向我转账

受苹果公司新规定影响,微信 iOS 版的赞赏功能被关闭,可通过二维码转账支持公众号。

    阅读
    好看
    已推荐到看一看
    你的朋友可以在“发现”-“看一看”看到你认为好看的文章。
    已取消,“好看”想法已同步删除
    已推荐到看一看 和朋友分享想法
    最多200字,当前共 发送

    已发送

    朋友将在看一看看到

    确定
    分享你的想法...
    取消

    分享想法到看一看

    确定
    最多200字,当前共

    发送中

    网络异常,请稍后重试

    微信扫一扫
    关注该公众号





    联系我们

    欢迎来到TinyMind。

    关于TinyMind的内容或商务合作、网站建议,举报不良信息等均可联系我们。

    TinyMind客服邮箱:support@tinymind.net.cn