本机真实用同样4个CPU密集任务和4个IO密集任务分别跑ThreadPoolExecutor和ProcessPoolExecutor,验证CPU密集任务线程池2.13秒/进程池0.68秒,IO密集任务两者都在0.3秒左右。
本机真实用自定义__enter__/__exit__验证:正常退出、内部抛异常、__exit__返回True吞掉异常,三种场景下__exit__真实都会被调用,第三种场景真实能让外面完全感知不到异常发生过。
本机真实对比没有try/finally和有try/finally的@contextmanager生成器,验证前者在内部异常时清理代码真实会被跳过(资源泄漏),后者真实总能执行到。
本机真实实现一个数据描述器拦截属性读写,验证即使直接往实例__dict__里塞同名key,读取真实依然会被描述器拦截——数据描述器的优先级真实高于实例字典,property本身也真实是用这套协议实现的。
本机真实统计__getattribute__和__getattr__的真实调用次数:8次属性访问全部真实触发__getattribute__,只有3次真正失败的访问触发了__getattr__,并真实复现了__getattr__里误用self.x导致的无限递归陷阱。
本机真实用sys.getsizeof追踪list每次真实扩容的元素数,发现扩容点是1、5、9、17、25...(超额分配),append 10万次真实只要0.0039秒,而insert(0,x) 10万次真实要2.37秒,差了608倍。
本机真实验证set删除990/1000个元素后内部表大小完全不变,真实构造5个哈希值相同但值不同的对象证明冲突不丢数据,再真实测出全冲突场景下查找慢了约2000倍。
本机真实用函数调用避开编译期常量折叠,验证运行期算出的100(在-5~256区间内) is 字面量100为True,而运行期算出的1000(超出区间) is 字面量1000为False——精确验证小整数缓存的真实边界。
本机真实用嵌套列表验证:修改原始对象的内层列表,浅拷贝真实跟着一起变了,深拷贝真实完全不受影响——用id()真实确认浅拷贝的内层元素跟原对象是同一个对象。
本机真实复现循环创建闭包的经典陷阱:3个lambda真实全部返回2而不是期望的0,1,2,用__closure__真实看到底层的cell对象,再验证用默认参数在定义时真实绑定值能修复这个问题。
本机真实连续三次调用append_to(item)不传target,验证默认列表真实在调用之间被共享,第二次调用真实带着第一次的历史数据;用id()和__defaults__真实确认背后是同一个对象。
本机真实用tracemalloc测10万个实例的总内存:没有__slots__真实占12.20MB,有__slots__真实只要8.38MB,省了约31%;但单个实例的sys.getsizeof真实显示两者一样,揭示了getsizeof真实的局限。