python解释器多版本共存
1.下载需要的版本安装包
2.增加环境变量,把优先用的python放到第一个
修改python.exe可执行文件,在终端输入对应名称可以指定需要运行的python版本
虚拟环境
python3 -m venv 虚拟环境路径 #新建虚拟环境
cd 虚拟环境路径/Script
acticate.bat #开启虚拟环境
使用pycharm提供的工具
变量赋值和引用
变量赋值的本质
每当定义一个新变量时,就会在内存中开辟一块空间用于数据存储
所以不同的变量他们的内存地址时不同的,使用id()获取内存地址,使用is 判断变量内存地址是否相同
name="张三"
age=18
#例如 以上两个变量的赋值,就是定义了两个变量,便令名分别是name和age
#本质上分别开辟了两块不同的内存控制,存放字符串“zhangsan”和数字18
#当我们访问name和age时,就会在对应的内存空间上获取值
【变量引用的本质】
把一个变量的内存地址,同时关联到另一个变量上,于是两个变量对应一块内存地址
a=100
b=a
#此时a和b指向同一块内存空间,即 id(a) == id(b)
案例 一
a = 100
b = a
a=200
print(a,b) 结果 200 100 重新赋值的a 已经作废了以前的引用 所以新的a指向了200
案例二
a=[1,2,3,4]
b=a
a[0]=100
print(a,b) 结果 [100,2,3,4] [100,2,3,4] 因为修改的是a指向里面的元素 所以a与b打印结果还是相同
小整数池
python在内存上有一定的优化,比如小整数池和字符串驻留
【小整数池】 python解释器会在程序开始运行的时候预先开辟一块内存空间,存放一部分整数
以后程序需要用到一些变量绑定这些值时,直接绑定到这个内存地址上,不需要在逐个开辟空间(开辟空间访问硬件需要资源消耗)这是python的一种资源优化机制 范围:-5~256
【字符串驻留】python的驻留机制对相同的字符串只保留一份拷贝,后续创建相同字符串时,不会开辟新空间,而是把该字符串的地址赋给新创建的变量。 范围 英文字母 数字 下划线
垃圾回收机制
变量使用前需要定义,
定义变量就是在内存中开辟一块空间用于数据储存,如果需要使用很多数据需要开辟很多内存空间
内存空间是有限的,如果定义了很多不再使用的变量,会导致内存浪费,甚至内存溢出的问题
这就需要我们在变量使用后 及时释放这个变量所占用的内存空间
但是这个释放内存空间的工作时复杂且有 风险的,幸运的是python解释器帮我们做了这部分工作
python解释器内存主要使用 引用计数 的方式回收垃圾
什么是垃圾:垃圾是指没有绑定变量名的值,也就是无法访问的值,即没有用的值
如何回收垃圾:引用计数的方式,每当这个值被引用,即被绑定到一个新的变量名上,引用计数+1
#通过 del 方法可以将变量名和值解绑,将引用计数减少
import sys
sys.getrefcount(值) #查看引用计数
标记回收、分代回收
#标记清除解决循环引用造成的问题
#分代回收解决引用计数效率低的问题
迭代器
可迭代对象(iterable)
指的是可以依次返回其内部成员的对象。比如字符串、列表、字典、文件都是可迭代对象。
迭代器(iterator)内置函数 iter(可迭代对象)得到迭代器,本质上迭代器也是可迭代对象