引用
数据在内存中存储的数据
a = 100 # a 是指向100的一个引用
print(id(a))
交互模式和直接引用的区别
直接引用
a = 367
b = 367
print(id(a)) # 2429337035888 每次运行结果会变
print(id(b)) # 2429337035888 每次运行结果会变
print(a is b) # True 判断两个变量地址
交互模式
python 的内存管理中,小整形-5 —— 256 缓存起了
>>> a = 367
>>> b = 367
>>> a is b
False
`>>> a = 256
`>>> b = 256
`>>> a is b
True
字符串 全部由字母组成 都指向一个内存地址
a = 'abcd'
b = 'abcd'
print(id(a)) # 2438912341424 每次结果都会变
print(id(b)) # 2438912341424 每次结果都会变
print(a is b) # True
字典 列表 容器 就算内容一样 地址也不一样
列表
list1 = ['孙千', '微笑']
list2 = ['孙千', '微笑']
print(list1 is list2) # False
print(id(list1)) # 2819443610184 每次结果都会变
print(id(list2)) # 2819443610696 每次结果都会变
字典
info = {'name': '孙千', 'age': '18', 'sex': '女'}
info1 = {'name': '孙千', 'age': '18', 'sex': '女'}
print(info is info1) # False
print(id(info)) # 2305791049384
print(id(info1)) # 2305791049464
可变和不可变类型
列表 字典 是可变类型
元组 字符串 数字是不可变类型
函数参数传递
参数的传递 传的是地址
def test1(a):
print(id(a))
b = 'hello'
print(id(b)) # 2109190209072
test1(b) # 2109190209072
递归 :
一个函数在内部不调用其他函数,而是自己本身的话,这个函数就是递归函数。
阶乘 #n的阶乘: n!
5! 5 * 4 * 3 * 2 * 1 5 * 4!
4! 4 * 3 * 2 * 1 4 * 3!
3! 3 * 2 * 1 3 * 2!
2! 2 * 1 2 * 1!
n! n * (n - 1)!
1! 1
def test(n):
if n == 1:
result = 1
else:
result = test(n - 1) * n
return result
print(test(5))