1、垃圾回收机制
x = 10 #直接引用
y=x
z=x
print(id(x))
print(id(y))
print(id(z))
l=[‘a’,‘b’,x] #间接引用
d={‘mmm’:x} # 间接引用
2、标记清除
x=10
l=[‘a’,‘b’,x] # l=['a’的内存地址,'b’的内存地址,10的内存地址
x=123
print(l[2])
循环引用:会引发内存泄露
l1=[111,]
l2=[222,]
l1.append(l2)
l2.append(l1)
print(l1)
print(l2)
栈区存放X指向----》 堆区内存地址对应存储值
标记清除:扫描栈区,存在无引用的内存地址标记该内存地址为清除
分代回收:标记,扫描标记,区分常量
与用户交互123
接收用户的输入
在python3:input会将用户输入的所有内容都存成字符串类型
username=input(‘请输入用户名’)
print(username,type(username))
int只能将纯数字的字符串转成整型
age=input(‘请输入你的年龄’)
age=int(age)
print(type(age))
在python2中:
raw_input():用法与python3中的input一样
input():要求用户必须输入一个明确的数据类型,输入的什么类型就存什么类型
2、字符串的格式化输出
一、%号
值按照位置与%s一一对应,多或者少都不可以
%s可以接收任意类型
%d只能接收int
res=‘my name is %s my age is %s’%(‘sds’,“18”)
res=‘my name is %(name)s my age is %(age)s’%{“name”:‘sds’,‘age’:‘18’}
print(res)
二、str.format:兼容性好
打破位置限制,参数传值
res=‘my name is {} my age is {}’.format(‘syw’,18)
res=‘my name is {name} my age is {age}’.format(age=18,name=‘syw’)
print(res)
三、f python3.5以后出现的
x=input(‘your name:’)
y=input(‘your age:’)
res=f’我的名字事{x}我的年龄是{y}’
print(res)
四、标准库
基本运算符
算数运算符
加减乘除(/结果带小数 ,//只保留整数部分, %取模,取余数 ,**几次方
比较运算符:> >= < <= == !=
赋值运算符:
=:变量的复制
增量赋值: age=18
age=age+1
age += 1 # 跟age=age+1一样
链式赋值
x=10
y=x
z=y
z=y=x=10 #链式赋值
交叉赋值
m=10 n=10 temp=m m=n n=temp//常规方法
python方法:m,n=n,m //交叉赋值
解压赋值:
salaries = [111, 222, 333, 44, 55]
把五个月的工资取出来分别赋值给不同的变量名
mon0, mon1, mon2, mon3, mon4 = salaries
print(mon0, mon2, mon3, mon4)
只取前*_列出来的,之后的数据以列表的形式存放于紧跟*之后的变量名
x, y, z, *_ = salaries = [111, 222, 333, 444, 555] # 前三个
*_, x, y, z = salaries = [111, 222, 333, 444, 555] # 后三个