文章目录
1. 抽象数据类型的操作
- 构造操作
这类操作主要是基于一些已知信息,产生这个类的实例对象。类似银行进行开通账户- 解析操作
这类操作是获取对象的一些有用信息,其结果反应了对象的一些特征,但返回的不是对象本身。类似银行查询账户余额- 变化操作
这类操作是修改对象内部的信息和状态。比如一个银行账户进行转账操作
如果一个类型,具有构造和解析操作,那么这个类型就是不可变类型,这个类型的对象就是不可变对象
如果一个类型,具有所有的三种操作,这个类型就是可变类型,这个类型的对象就是可变对象。
2. Python对象的基本要素
★ id :身份标识,也就是内存地址
★ type :数据类型
★ value:值
在Python中,有两个比较相等的运算符,分别是is和==:
- ==:用来比较判断两个对象的 value(值)是否相等
- is: 用来比较判断的是对象间的唯一身份标识是否相等,也就是 id 是否相同
- Python 中 int 和 string 有小型的的数据池
- 对于 int,范围为 [-5,256]
- 对于 string,首先不能有空格,其次最长不超过 20 个字符并且不能有特殊字符。
- is运算符比==效率高,在变量和 None 进行比较时,应该使用is。
3. Python中的可变对象与不可变对象
3.1 不可变对象——数字、字符串、元组
对象所指向的内存中的值不能被改变,当改变这个变量的时候,原来指向的内存中的值不变,变量不再指向原来的值,而是开辟一块新的内存,变量指向新的内存
# ==========================
# 数字,包括布尔变量
# ==========================
n = 2
d1 = id(n)
n += 2
d2 = id(n)
print(d1 == d2) # False
类似地,字符串,元组也是一样
# ==========================
# 字符串
# ==========================
s = "I love"
d1 = id(s)
s += "you"
d2 = id(s)
print(d1 == d2) # False
# ==========================
# 元组
# ==========================
t = (1,3)
d1 = id(t)
t += (4,)
d2 = id(t)
print(d1 == d2) # False
★ tuple的元素是list时,改变list的元素不影响tuple的id
l = [1,2]
t = (1,5,l)
n1 = id(t)
l += [3,4]
n2 = id(t)
print(n1 == n2) # True
3.2 可变对象——列表、集合、字典
对象指向的内存中的值会改变,当更改这个变量的时候,还是指向原来内存中的值,并且在原来的内存值进行原地修改,并没有开辟新的内存。
l = [1,2]
d1 = id(l)
l += [3,4]
d2 = id(l)
print(d1 == d2) # True
4 函数参数
如果参数是可变对象,则在函数内部更改该对象时,会同时影响到外部的对象,如果参数是不可变对象,无论函数内部如何修改该对象,对外部对象都没有影响,只是让局部变量指向了修改过新创建的对象而已