1.最常见的情况
a = ['a','b','c']
b = a # 在 列表变量 a 的存储空间上再贴一个变量名为 b 的标签
b.pop(-1)
print(id(a) == id(b)) # True
print(a) # a = ['a','b']
2.在函数中
def f():
y = x # 在 列表变量 x 的存储空间上再贴一个变量名为 y 的标签
y.pop(-1) # 对于可变类型的数据,函数内部的操作会影响结果
print(y) # y的值:['a', 'b', 'c']
print(id(y)) # y的ID:2095357376704
f()
print(x) # x的值:['a', 'b', 'c']
print(id(x)) # x的ID:2095357376704
3.在函数内部创建一个和外部重名的列表
# 这个是重点!!此k非彼k
k = ['a','b'] # 在内存开辟一个空间地址id1,存储['a','b'],名字叫 k
def f():
k = [1,2,3] # 又开辟另一个空间地址id2,存储[1,2,3],名字还是叫做 k
print(id(k)) # ID:1954352690496
print(k) # 值:[1, 2, 3]
f()
print(id(k)) # ID:1954352687488
print(k) # 值:['a', 'b']
4.直接在外部重命名
直接赋值的结果
a = [1,2,3]
print(a) # [1, 2, 3]
print(id(a)) # 2681915357568
a = [0,1,2]
print(a) # [0, 1, 2]
print(id(a)) # 2681915186368
结论:1.a = b,这种赋值方法也是一种复制的形式,ID 和 值都一样
2.创建的重名变量是一个新的变量