赋值
抛出问题:赋值是什么?
赋值是对象的引用(别名),是拷贝了对象的引用,而不是拷贝对象。
比如 a = 7, b = a 请看图
它们指向的是同一个对象相同的内存地址。
下图是错误理解
所以赋值它们的内存地址是一样的。
a = 7
b = a
print("a: %i" % a)
print("b: %i" % b)
print("a内存地址:")
print(id(a))
print("b内存地址:")
print(id(b))
输出结果为:
a: 7
b: 7
a内存地址:
140722214904400
b内存地址:
140722214904400
从上输出结果可以看出 变量a
跟 变量b
内存地址是一样的。
既然它们指向的是同一个对象,假设我们改变了 变量a或者变量b那么对象是不是也随着改变呢?
这时候要引出另一个知识点 可变类型与不可变类型
可变类型:
- 列表(list)
- 字典(dict)
- 可变集合
不可变类型
- 数字(int, long, float)
- 布尔(bool)
- 字符串(string)
- 元组(tuple)
什么是不可变类型?
- 变量对应的值中的数据是不能被修改,
- 如果修改就会生成一个新的值从而分配新的内存空间。
什么是可变类型?
- 变量对应的值中的数据可以被修改,
- 但内存地址保持不变。
案例一
a = 7
b = a
a += 1 # 修改 变量a
print("a:%i" % a)
print("b:%i" % b)