IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> python入门(day3) -> 正文阅读

[Python知识库]python入门(day3)

复习昨天

  1. 什么是变量?为什么要有变量?

  2. 变量的三大组成部分是?每部分的作用是什么?

  3. 变量名的命名原则、规范、风格

  4. 变量名的三个特征是什么?(id type 值 )

  5. is与==的区别

  6. id相同值是否可以相同?

  7. id不同值是否可以相同?

  8. 用变量的定义说明int、float、str、list、dict、bool类型用于记录何种状态?


目录

一、垃圾回收机制(后续专门讨论)

引用计数

标记清除

分代回收

二、用户的交互

#接受用户输入

字符串的格式化输出

三、基本运算符


一、垃圾回收机制(后续专门讨论)

引用计数

?x = 10 ?# 直接引用
?print(id(x))
?y = x
?z = x
??
?l = ['a', x] ?# 间接引用
?print(id(l[1]))
  • 什么是垃圾回收机制

垃圾回收机制(简称GC)是Python解释器自带的一种机制,专门用来回收不可用的变量值所占用的内存空间

注:列表和字典的内存空间中并不存放真正的值,只存放索引和值的内存地址()

?x = 10
?l = ['a','b',x]
?# l = ['a'的内存地址,'b'的内存地址,10的内存地址]
?x = 123
?print(l[2]) ?# 输出10,不影响l[2]指向的10的地址
?# 与强类型语言不一样,一旦赋值就会开辟新内存空间,原值被间接引用,不会被回收
  • 引用计数增加

    • a = 10

    • m = a

    • 间接引用

  • 引用计数减少

    • a = 18

    • del m

标记清除

  • 循环引用=>导致内存泄露问题

?l1 = [111]
?l2 = [222]
?l1.append(l2) ?# l1 = [值111的内存地址,l2列表的内存地址]
?l2.append(l1) ?# l2 = [值222的内存地址,l1列表的内存地址]
??
?# print(id(l1[1]))
?# print(id(l2))
??
?# print(id(l2[1]))
?# print(id(l1))
??
?del l1
?del l2
  • 标记清除

1、标记 通俗地讲就是:标记的过程就行相当于从栈区出发一条线,“连接”到堆区,再由堆区间接“连接”到其他地址,凡是被这条自栈区起始的线连接到内存空间都属于可以访达的,会被标记为存活

具体地:标记的过程其实就是,遍历所有的GC Roots对象(栈区中的所有内容或者线程都可以作为GC Roots对象),然后将所有GC Roots的对象可以直接或间接访问到的对象标记为存活的对象,其余的均为非存活对象,应该被清除。 #2、清除 清除的过程将遍历堆中所有的对象,将没有标记存活的对象全部清除掉。

直接引用指的是从栈区出发直接引用到的内存地址,间接引用指的是从栈区出发引用到堆区后再进一步引用到的内存地址

img

当我们同时删除l1与l2时,会清理到栈区中l1与l2的内容

img

这样在启用标记清除算法时,发现栈区内不再有l1与l2(只剩下堆区内二者的相互引用),于是列表1与列表2都没有被标记为存活,二者会被清理掉,这样就解决了循环引用带来的内存泄漏问题。

分代回收

  • 引入

什么时候扫描去检测循环引??

标记和清除的过程效率不?。清除?活动的对象前它必须顺序扫描整个堆内存,哪怕只剩下?部分活动对象也要扫描所有对象。

  • 将第?个链表(可能存在循环引?的链表),维护成3个环状双向的链表:

    • 0代: 0代中对象个数达到700个,扫描?次。

    • 1代: 0代扫描10次,则1代扫描1次。

    • 2代: 1代扫描10次,则2代扫描1次。

?

二、用户的交互

#接受用户输入

  • 在Python3:input会将用户输入的所有内容都存成字符串类型

?username = input("请输入您的账号:")
?print(username, type(username))
??
?age = input("请输入您的年龄:")
?print(age, type(age))
?flag = int(age) > 18
?# 这里只能强转整数字符串
  • 在Python2中:

    • raw_input()和python3当中的input一模一样

    • input()要求用户必须输入一个明确的数据类型,输入的是什么类型,就存什么类型

字符串的格式化输出

1、%

?# 按照位置传值
?res = "my name is %s my age is %s" %("xxx","18")
?print(res)
??
?# 按照键传值
?res2 = "my name is %(name)s my age is %(age)s" % {"name":"xxx","age":"18"}
?print(res2)
?# %s 可以接受任意类型
?# %d 只能接收int

2、str.format(兼容性好)

?# 按照位置传值
?res = '我的名字是{0}{0}{0},我的年龄是{1}{1}{1}'.format('xxx','20')
??
?# 按照键传值
?res = '我的名字是{name},我的年龄是{age}'.format(name = 'xxx', age = 20)

3、f python3.5以后才推出(速度最快)

?x = input('your name:')
?y = input('your age:')
?res = f'我的名字是{x} 我的年龄是{y}'
?print(res)

三、基本运算符

?# 1、算术运算符
?print(10 / 3) ?# 结果带小数
?print(10 // 3) ?# 只保留整数部分
?print(10 % 3) ?# 取模取余数
?print(10 ** 3) ?# 求10的三次方
?# 其余略
??
?# 2、比较运算符: >、<、<=、>=、!=、==
??
?# 3、赋值运算符
?# 3.1 变量的赋值
?age = 18
?# 3.2增量赋值
?age += 18
?age -= 18
?age %= 18
?age /= 18
?age **= 18
??
?# 3.3链式赋值
?z = y = x = 10 ?#链式赋值
??
?#3.4 交叉赋值
?m = 10
?n = 20
?m, n = n, m
?'''
?temp = m
?m = n
?n = temp
?'''
?print(m, n)
??
?# 3.5解压赋值
?salaries = [111, 222, 333, 444]
?'''
?mon0 = salaries[0]
?mon1 = salaries[1]
?mon2 = salaries[2]
?mon3 = salaries[3]
?'''
?mon0. mon1, mon2, mon3 = salaries
?# 对应的变量名和列表的值必须一一对应
??
?#取前三个值
?x, y, z, *_ = salaries ?
?# *会将没有对应关系的值存成列表,然后赋值给紧跟其后的那个变量名,此处为下划线
??
?# 取后三个值
?*_, a, b, c = salaries 

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2021-08-19 12:01:31  更:2021-08-19 12:02:35 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 9:37:55-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码