python中一切皆对象
不可变
数值类型不可变
a = 1
b = 1
c = [1,]
a is b ---> True
a is c[0] --->True
del a 只是删除了对 --对象1-- 的引用
del b 只是删除了对 --对象1-- 的引用
del c[0] 只是删除了对 --对象1-- 的引用
del c[2:] 只是删除了对 范围索引的引用
d = c[2:]
del d 只是删除了d引用的对象
当一个对象的引用计数为0时,垃圾回收机制回收该对象,释放内存。
查看引用计数
sys.getrefcount(obj)
元组不可变
t = ("a","b","c",["a","f"])
t[0] 只能是 "a" 字符串对象
t[1] 只能是 "b" 字符串对象
。。。
t[3] 只能是 该列表对象,但是列表里面的内容可以变
字符串不可变
s1 = "ab"
s2 = s1 + "c"
s1 is s2 ----> False
id(s1)
id(s2)
完全是两个对象
可变
列表
a = [1,2,3]
a.append(5)
#a对象本身追加了一个元素
赋值:
追加元素:
del a[0] :
字典可变
d = {}
d["name"] = "jack"
集合可变
s = set()
s.add(4)
s.add(5)
s.remove(5)
s.pop()
s.clear() #清空
s.copy() # 浅拷贝
s.update(s1) #更新进s中,同字典
s1 & s2 #交集 返回新集合对象 s1.intersection(s2)
s1 | s2 #并集 s1.union(s2)
s1 - s2 #差集 同s1.difference(s2)
浅拷贝与深拷贝
浅拷贝:python中默认均为浅拷贝,对象不同,但复制的对象中的数据项 是对原来对象中的数据项的引用
深拷贝:两个对象中的数据项是完全独立的
from copy import deepcopy
a = [1,2,3,[1,2]]
b = a.copy() #浅拷贝
a[-1].append(3)
# a==>[1,2,3,[1,2,3]]
print(b)
# b==>[1,2,3,[1,2,3]]
from copy import deepcopy
c = deepcopy(a)
del a[-1][-1]
# a==>[1,2,3,[1,2]]
print(c)
# c==>[1,2,3,[1,2,3]]