一、发现之前没有线程的日志,写了一个简单的,参考来源:https://www.cnblogs.com/vamei/archive/2012/10/11/2720042.html
import threading def demo(i): print("线程名",i) try: i = 0 # 开启线程数目 tasks_number = 10 print('测试启动') ths = [] # threadLock = threading.Lock() while i < tasks_number: # target:运行目标内容, name:线程名 ,这里的args会作为target入参 t = threading.Thread(target=demo,name=f"线程{i}",args=(i,)) ths.append(t) i += 1 for i in ths: i.start() for i in ths: i.join() print("退出线程") except Exception as e: print(e)
二、深浅拷贝
浅拷贝只复制指向某个对象的指针而不复制对象本身,新旧对象还是共享同一块内存。
但深拷贝会另外创造一个一模一样的对象,新对象跟原对象不共享内存,修改新对象不会改到原对象
import copy a=['hello',[1,2,3],{'a':1,'b':2},[[1],2]] b=a c=copy.copy(a) print([id(x) for x in a]) print([id(x) for x in b]) a[0]='world' a[1].append(4) a[2]['a']=5 print('a=',a) # a= ['world', [1, 2, 3, 4], {'a': 5, 'b': 2}, [[1], 2]] print('b=',b) # b= ['world', [1, 2, 3, 4], {'a': 5, 'b': 2}, [[1], 2]] print('c=',c) # c= ['hello', [1, 2, 3, 4], {'a': 5, 'b': 2}, [[1], 2]] # 由于a[1]是不可变数据类型,所以a[0]修改了,c[0]仍然指向的是原来的地址
参考来源:https://zhuanlan.zhihu.com/p/25221086
三、属性动态设置
1、hasattr(object, name)
判断一个对象里面是否有name属性或者name方法,返回BOOL值,有name特性返回True, 否则返回False。
2、getattr(object, name[,default])
获取对象object的属性或者方法,如果存在打印出来,如果不存在,打印出默认值,默认值可选。
3、setattr(object, name, values)
给对象的属性赋值,若属性不存在,先创建再赋值。
4、delattr(object, name)
delattr函数用于删除name属性
delattr(x, ‘foobar’)相当于del x.foobar