python基础篇学习(二)之变量+常量

本文介绍了Python中的变量概念,包括定义、使用规则以及垃圾回收机制(引用计数、标记清除和分代回收)。此外,还讲解了小整数池和Python中的“常量”约定,尽管Python语法无常量,但开发者通常使用全大写的变量名表示常量。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、变量

"""
变量
    -先定义,后引用
"""
name = "小圆子"
print(name)

age = 26
print(age)

二、python垃圾回收机制

垃圾回收机制底层是怎么运行的,涉及到三个概念:1.引用计数;2.标记清除;3.分代回收
1.引用计数机制

# 引用计数的增加
a = 100
b = a
c = a
# 引用计数的减少
del a
print(a)  # 这种就会报错,name 'a' is not defined
del b
c = 123
print(c)

2.标记清除机制

l1=['a','b']
l2=['x','y']
l1.append(l2)
print(l1)
print(id(l2),id(l1[2]))
l2.append(l1)
print(l2)
print(id(l1),id(l2[2]))
# 这两个列表存在一种相互引用的关系,就叫做循环引用
----------------------------------------------------------------
# 运行结果:
['a', 'b', ['x', 'y']]
2230756681088 2230756681088
['x', 'y', ['a', 'b', [...]]]
2230756998272 2230756998272

del l1
del l2
# 现在已经把这两个列表的直接引用全部解除了,但是它们身上的引用计数并没有变成0,它们身上只有它们相互的间接引用,再也没办法取到这两个列表了,
# 所以这两个列表这时候就变成了一个永远回收不了的垃圾,永远占着这两块内存空间,这就叫内存泄漏

这时候python就提供了一个叫标记清除的解决方案:标记清除会在你python程序内存空间不够用的时候,将整个程序暂停下来,扫描栈区,把通过栈区所有能引用到的值(不管是通过栈区直接引用还是间接引用到的),都标记为存活状态,一旦发现有通过栈区引用不到的值,都标记为死亡状态,死亡状态的值会直接被清理掉,就算它身上的引用计数不为0,只要访问不到它了,标记清除就会把它标记成垃圾,然后回收掉
3.分代回收机制
出现此机制的原因:引用计数和标记清除已经可以实现回收所有的垃圾了,但现在的垃圾回收机制还有一个弊端,就是基于引用计数的垃圾回收机制,每次回收内存都需要把所有对象的引用计数都遍历一遍,当申请的变量很多时,每次都要扫描一遍,效率很低
分代回收的工作原理:根据间隔时间和分类的条件来扫描归类,会发现整体的扫描频率被大幅度降低了,但是扫描效率大幅度提高了
4.总结
垃圾回收机制主要用引用计数来扫描并回收垃圾,用标记清除解决引用计数回收不了的垃圾,用分代回收解决引用计数扫描的效率问题

三、变量的三大组成部分

1.变量名
规范:见名之意、字母数字下划线(大写一般表示常量,小写一般表示变量,变量名不能数字开头,不能用python内置的关键词作为变量名)、最好不要用拼音和中文
2.赋值符号=
3.变量值

name = "小圆子"
age = 26
price = 3.5
# id 反应的是根据变量值的内存地址所计算出的一个id号码(即内存地址的映射)
print(id(name))
# type 类型
print(type(price))
----------------------------------------------------------------
# 运行结果
2012994085296
<class 'float'>

四、is与==的区别

a = "小圆子"
b = "小圆子"
# is 即身份运算(比较两个变量值的id号是否相等)
print(a, b)
# == 即比较左右变量的值是否相等
print(id(a), id(b))
----------------------------------------------------------------
# 运行结果:
# pycharm:(pycharm会自动给我们做优化)
小圆子 小圆子
1516368241072 1516368241072

# 命令行:
小圆子 小圆子
1597796422928 1597796713168

五、小整数池

小整数池:为了避免因创建相同的值,而重复申请内存空间所带来的的效率问题,python解释器会在启动那一刻开始,创建出小整数池,范围是-5~256,而这些小整数也永远不会被垃圾回收机制回收

C:\Users\Admin>python
Python 3.9.7 (tags/v3.9.7:1016ef3, Aug 30 2021, 20:19:38) [MSC v.1929 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> a=10
>>> b=10
>>> id(a)
2629389675088
>>> id(b)
2629389675088
>>> a is b
True

>>> c=5+5
>>> id(c)
2629389675088

>>> a=257
>>> b=257
>>> id(a)
2629419822032
>>> id(b)
2629419821936
>>> a is b
False

六、常量

前提:在python语法中没有常量的概念,但在日常开发中会有常量的概念;
常量:所有的量在python当中都是变量,于是在python里就有一些约定俗成的东西,把变量名的所有小写字母全部换成大写,用来代表常量,但本质上还是一个变量

PIE=3.141592653589
AGE=19
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值