Python:
不可变的对象:Numeber数字、String字符串、Tuple元组
可变的对象:List列表、Set集合、Dict字典
可迭代的对象:列表、元组、字典、集合。——enumerate等循环可迭代。
初始化:元组 a=(),单个元素时注意逗号 a=(1,)
列表 a=[]
集合 a=set()
字典 a={}
数组和列表的区别:
数组内的数据类型必须一样,列表内的数据类型可以不一样。
相对于数组,列表会使用更多的存储空间
列表和元组的区别:
1、列表是可变的(动态数组),元组是不可变的(静态数组)。
相对于 list 而言,tuple 是不可变的,这使得它可以作为 dict 的 key,或者扔进 set 里,而 list 则不行。
tuple 放弃了对元素的增删(内存结构设计上变的更精简),换取的是性能上的提升:创建 tuple 比 list 要快,存储空间比 list 占用更小。所以就出现了“能用 tuple 的地方就不用 list”的说法。
多线程并发的时候,tuple 是不需要加锁的,不用担心安全问题,编写也简单多了。
列表和集合的区别:
集合是可以去重的,不允许重复项,列表可以有重复项。
集合是无序的,不可以索引切片,列表可以索引切片。
集合和字典的区别:
两者都是无序的,不可索引切片。
字典的遍历:
for k, v in dict_s.items():
字典转列表:
list_s = list(dict_s.items())
字符串的拼接:直接用 +
list_s = [('a', 2), ('b', 3)]
res = ''
while list_s:
tmp = list_s.pop(0)
res += tmp[0]*tmp[1]
print(res) #输出 "aabbb"
__new__ 是在实例创建之前被调用,然后返回实例对象,是静态方法(属于类),需要返回值。
__init__ 是实例对象创建后调用的,初始化类实例,是实例方法。(不需要返回值)。
对于不可变数据类型,如数字、字符串、元组
a= 5 后再 a=10,不会更改a对象指向的内存块的值,而是重新开辟一个值对象10的内存块,让a指向10,而放弃值对象5的内存块。
import copy
a=[1, 2, [3, 4]]
直接赋值: b = a
浅拷贝: c = copy.copy(a) ,拷贝父对象,不会拷贝对象嵌套的子对象。
深拷贝:d = copy.deepcopy(a)。递归拷贝,完全拷贝父对象和其子对象。
index():
append():
extend():
pop()