欢迎光临散文网 会员登陆 & 注册

07xx-IO文件读写

2023-07-31 20:21 作者:GHWNM  | 我要投稿

读取全部

f.read()

括号里填参表示读取几个字符


按行读取到列表中,每行为一个元素

f.readlines()

同样,括号里的参数决定读取的行数(?

不加s就是只读一行,括号参数决定哪一行(?


这些代码一次读取全部,量大了容易撑爆内存

可以用for item in f来读取,他是用迭代的方式来操作


python内存管理机制

1. 引用技术:每个数据记录着被变量关联的次数

当为0时,数据成为垃圾(被标记清楚时才释放)

缺点:存在循环引用,垃圾数据占用内存的情况


2. 标记清除:全盘扫描内存空间,检测不再使用的数据

缺点:速度很慢


3. 分代挥手:将内存分为012(小中大)三代,

每次在0代创建数据,

当内存告急时触发标记清楚,将有用的数据升代


这个不用你自个干,你能干的是调整这三代的大小,什么时候算告急

但是不建议你干,因为他原本分配的内存就合适,而且你要改需要你有很深的技术造诣

以及你可以做好优化,从根本上减少内存使用

比如for循环,前几个取出来的item虽然引用基数为0,但是垃圾确实产生了,会加快0代内存的清除

减少垃圾产生,对象池


比如

name01 = 'xxx'

name02 = 'xxx'

id(name01) == id(name02)  True

创建变量的时候:如果对象池中没有相同数据则开辟空间存储;如果有则直接返回数据地址

提高内存利用率,浮点型,字符串型等等,包括元组,这些不可变数据才有对象池,比如列表等就没有

python3.2之后元组才有的对象池,但是不具备对象池的你可以自己写


所以游戏中打AI,实际上是隐藏了美术模型,然后你去其他地方又打打的是同一拨人,只是模型弄过去数据更新下

要是每个都是单独模型,那对设备的要求非常高,像游戏里的子弹啊,之类的,都是对象池


但是还是该怎么用怎么用,python底层有优化,比如print([]),这个本来应该是没有对象池的

但是如果你Id一些看看就会发现这个也创建了对象池,这些优化在做底层的一些操作的时候很有可能会坏事

比如之前那个多线程的项目,就牵扯到了GIL锁还是哪个,优化给干炸了

(顺带一提,那个是用海龟库画了个界面出来,多线程一边检测光标坐标一边绘制,优化和工作量都很大,吃力不讨好,不如PyQt)

# 这个应该算是个"实时渲染"(


07xx-IO文件读写的评论 (共 条)

分享到微博请遵守国家法律