一、引用
在java中既有值传递,也有引用传递,我们思考一下在python中值的传递方式是哪种类型呢?
答案是引用传递。
概述:
Python中存储变量是需要占用内存空间的,为了更好地管理这些空间,每块空间都是有自己的地址值的。
格式:
id(变量名/值) 可以查看变量/值在内存中的地址。
细节:
Python中的 = 是引用传递,即:把等号右边的变量(值)地址值赋给 左边的变量。
记忆:
1.可变和不可变类型的划分依据:
在不改变地址值的情况下,其元素值是否可以发生改变;如果可以发生改变就是可变类型,不可以发生改变就是不可变类型。
2.可变和不可变类型的具体划分如下:
可变类型:列表,字典,集合;
不可变类型:整型,浮点型,布尔类型,字符串类型,元组类型。
示例1.观察如下代码中在内存中有几个10
# 需求1: 观察如下的代码, 分析: 内存中到底有几个10.
a = 10
b = a
c = aprint(a, b, c) # 10, 10, 10# 观察 a, b, c的地址值.
print(id(a)) # 140726997170904
print(id(b)) # 140726997170904
print(id(c)) # 140726997170904
print('-' * 30)
运行结果:
根据结果,我们可以分析得出a,b,c三个变量都指向同一个地址,这个地址内存储的是10.
示例2.演示不可变类型修改值之后地址的变化
# 需求2: 演示 不可变类型. 整型
a = 100
print(f'变量a的内容: {a}') # 100
print(f'变量a的地址: {id(a)}') # 0x01, 140727005431320# 修改变量 a 的值.
a = 200
print(f'变量a的内容: {a}') # 200
print(f'变量a的地址: {id(a)}') # 0x02, 140727005434520
print('-' * 30)
运行结果:
可以看出,对于不可变类型,修改值之后会地址值会发生改变,变量a原来指向100对应的地址,修改值之后,地址对应也发生改变,指向200对应的地址。