地址引用与垃圾回收
变量的==地址引用==
a = "jack"
b = a
a = "tom"
# b 的值?
==删除引用==
a = "jack"
b = a
del a
del b
当一个对象没有被引用时,python的垃圾回收机制就会将当前对象销毁,释放内存。
查看对象内存编号,id(obj)
判断对象的类型
在python程序中,经常需要判断obj的类型。 常用方法:
type
#type
type(obj) is int
type(obj) is float
type(obj) is str
type(obj) is bool
type(obj) is None #None是一个唯一的对象,表示空值
type(obj) is list
type(obj) is tuple
type(obj) is dict
type(obj) is set
type(obj) is not int
这里的==is==判断是否同一个对象;==判断是否值相同。
isinstance
a = 24
isinstance(a,int)
isinstance(a,(int,str,bool)) #满足是其中一个类的实例,返回True
issubclass(int,object) #判断是否是子类
三元操作符
a = 1
b = "jack"
c = a if a else b
列表的增删改查、分片
alist = ["jack","tom","lucy","jack"]
alist.tab #查看方法
alist[1:3] #["tom","lucy"]
alist[::-1] #逆序
alist[::2] #指定间隔["jack","lucy"]
练习:
- 查找到alist中第二个”jack“的索引值,并将jack改为jack2.
- 分片实现alist 的逆序
- 打印出alist中索引为奇数的值
- 对alist本身进行逆序排序
答案:
#1.
alist.index("jack",alist.index("jack")+1)
#2.
alist[::-1]
#3.
for i in range(len(alist)):
if i%2 != 0:
print(alist[i])
#4. 本身排序
alist.sort() #返回None
alist.reverse()
元组使用及不可变
引用地址不可变,一般存储只读的数据
字符串
s = r"原始字符串,不转义"
s.tab #查看方法
s.capitalize() #大写第一个字符
s.title() #大写每一个单词的首字母
s.center(100,"*") #居中
s.ljust(100,"*") #长度100,左对齐,不够补*
s.rjust(100,"*")
s.upper() #转为大写
s.lower()
s.islower() #是否全部小写
s.isupper()
s.startswith("xxx",start,end)
s.endswith("xxx",start,end)
#字符串的格式化
"name is {0} , age is {1}, this name {0}".format("jack",25)
"name is {name} , age is {age}, this name {name}".format(name="jack",age=25)
"name is %s,age is %d"%("jack",25)
#查找
s.find("xxx",start,end) #返回索引/-1
s.index("xxx",start,end) #返回索引/异常ValueError
s.isdigit() #是否数字,(整数)
s.isspace()
s.join(["jack","tom"]) #使用s去拼接列表中的项目
s.strip() #去除两边的空格
s.strip("xx")#去除两边的xx
s.rstrip("xx")
s.lstrip("xx")
s.replace("old","new",count=num) #替换几次,默认全部
s.split("xx",maxsplit=1) #以xx分割字符串,最多分割一次;默认全部
练习: pending
字典
key-value 存储,无序的容器数据结构 key唯一且不可变类型,如"name"/ 1/1.0/(1,2,3) 查询速度快,时间复杂度O(1)
d = {"name":"jack"}
d1 = dict(name="tom")
d2 = {}.fromkeys([1,2,3],None)
#插入
d["age"] = 25
d.setdefault(key,value) #原来无此key则写入,并返回value; 否则不写入,只返回原始的value
#删除
d.pop(key)
d.popitem()
del d[key]
#更新
d.update(key=value) #跟新一个key
d.update({"name":"jack","age":25}) #会覆盖原有的key
#查询
if key in d:
d[key]
d.get(key,None) #查询,无则返回None/其他
d.keys()
d.values()
d.items()
集合
无序、去重的容器数据结构 存储不可变的数据类型
set1 = set()
set1.add(5)
set1.add([1,2,3]) #error
#删除
set1.discard(5) #存在则删除,不存在则什么也不做
set1.pop() #随机删除
set1.remove(5) #不存在,则报错
5 in set1 #是否包含
#集合不能索引操作
#集合的关系操作
#交集
s1 & s2
#差集
s1 - s2
#并集
s1 | s2
#异或 属于s1不属于s2 | 属于s2不属于s1
s1 ^ s2
s1.issubset(s2)
s2.issuperset(s1)
s1.isdisjoint(s2) #是否无交集