ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

学习:python进阶 (一)

2022-08-27 16:01:33  阅读:220  来源: 互联网

标签:进阶 迭代 python 内存空间 学习 引用 100 变量


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(可迭代对象)得到迭代器,本质上迭代器也是可迭代对象

 

标签:进阶,迭代,python,内存空间,学习,引用,100,变量
来源: https://www.cnblogs.com/datizi/p/16630704.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有