Python:dict 字典,其内存占用的一些探究
近期看到V2EX上一个老帖子 新人求教: Python 删除 dict 一个 item 后,内存不释放的?引起了我的思考,如果对一个dict对象进行增删改操作,它的内存占用会发生什么样的变化?
运行环境 Runtime environment123操作系统: Windos10 IDE: JetBrains Pycharm 2019.2.4 x64 语言: Python 3.7.4
背景最近因为开发的需要,需要对内存进行优化。尤其是在使用异步操作全局变量增删改查的时候可能带来的内存冗余问题。近期看到V2EX上一个老帖子 新人求教: Python 删除 dict 一个 item 后,内存不释放的?引起了我的思考,如果对一个dict对象进行增删改查操作,它的内存占用会发生什么样的变化?而Python中的字典又是内存占用大户,怎么用才能省内存呢?
创建字典探究过程中需要使用到sys,copy,time,random这几个包
123456import sys,copy,time,randomn = dict() ...
运行维护:Docker的常用命令
docker是个好东西,但是每次用到某些docker命令的时候又要跑去搜搜搜干脆自己写个博客,把自己常用的docker命令收集起来方便用。
运行环境 Runtime environment123操作系统: ubuntu18.04 IDE: JetBrains Pycharm 2019.2.4 x64 语言: Python 3.7.4
安装和卸载卸载旧版本Docker 的旧版本被称为 docker,docker.io 或 docker-engine 。如果已安装,请卸载它们:
1sudo apt-get remove docker docker-engine docker.io containerd runc
安装docker我比较喜欢图省事233,使用docker官方提供的脚本安装!
12345678sudo wget -qO- https://get.docker.com/ | bash# 如果上面的不行,执行下面两句curl -fsSL https://get.docker.com -o get-docker.shsudo sh get-docker.sh# 安装成功执行下 ...
Xpath:基本应用的记录和轴相关的高级应用
Python爬虫开发中,xpath速度是比较快的使用较为灵活,是在网页定位元素的较优选择。虽然文本解析库中正则表达式的性能比Xpath要强,但是企业级爬虫开发里,Xpath比正则要更为常见得多。对于我的话,“不管是什么魔法、什么妖法,只有有用的都会用。”而往网上的文章,对于Xpath语句的记录都比较零碎,所以在这里统一整理一下,自己可能常用的Xpath。
运行环境 Runtime environment123操作系统 : Windows10 IDE: JetBrains Python 2018.2.4 x64 语言: Pytthon 3.6.5
准备在python中安装Xpath,在终端输入完成安装。通常来讲安装是不会出现问题,如果出现了请根据报错搜索解决。高版本的lxml是没有etree方法的,所以网上的代码不一定有用多数因为这个原因。
pip install lxml
测试用的前端网页代码
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474 ...
Python:Scrapy面试知识的整理
感觉我需要先把Scrapy官方文档再过一遍,收集了一下网上的scrapy面试题,发现面试会碰到什么情况的问题也真的是无法预料。
前言只说一句,官方文档万岁。
Scrapy QA对网上见过的问题,进行知识点整理。
Scarapy 数据流1234567891011121314基本必问,脑海里最好有一张流程图1. Engine获得从爬行器中爬行的初始请求。2. Engine在调度程序中调度请求,并请求下一次抓取请求。3. 调度程序将下一个请求返回到引擎。4. 引擎将请求发送到下载器,通过下载器中间件(请参阅process_request())。5. 页面下载完成后,下载器生成一个响应(带有该页面)并将其发送给引擎,通过下载器中间件(请参阅process_response())。6. 引擎从下载加载程序接收响应,并将其发送给Spider进行处理,并通过Spider中间件(请参阅process_spider_input())。7. Spider处理响应,并向引擎返回报废的项和新请求(要跟踪的),通过Spider中间件(请参阅process_spider_output())。8. 引擎将已处理 ...
Python:部分面试知识点梳理
都说三天不写,手生。练一个多月的车,考驾驶证。有很多东西,我本以为我还记得,但是一到写起来的时候有不少细节我真的想不起来了,又得回头到搜索引擎去查。搞技术的人,自己的博客真的就是自己的第二个大脑,要多往里面存存东西才是。无论是多简单的东西,记一记总是好的。至少,自己的博客可不会嫌我啰嗦,不是吗?
QA整理:进程和线程的概念123456789101112131415161718192021222324252627282930313233“进程是资源分配的最小单位,线程是CPU调度的最小单位”。1、进程是什么?是具有一定独立功能的程序、它是系统进行资源分配和调度的一个独立单位,重点在系统调度和单独的单位,也就是说进程是可以独 立运行的一段程序。2、线程又是什么?线程进程的一个实体,是CPU调度和分派的基本单位,他是比进程更小的能独立运行的基本单位,线程自己基本上不拥有系统资源。在运行时,只是暂用一些计数器、寄存器和栈 。进程和线程的关系1. 一个线程只能属于一个进程,而一个进程可以有多个线程,但至少有一个线程(通常说的主线程)。2. 资源分配给进程,同一进程的所有线程共享该进程的所有 ...
Python:字典生成式
知道有这么玩意,但是隔了一段时间不用,又容易忘记它的语法,又得网上查一遍。这次就自己用博客好好记下来。
运行环境 Runtime environment123操作系统 : Windows10 IDE: JetBrains Python 2018.2.4 x64 语言: Pytthon 3.6.5
背景用一串简短的代码代替冗长判断嵌套,让代码变得更加简洁明了。同类的还有列表生成器,而字典生成器相对来说用得少了一些。
字典生成式字典生成式的语法格式:
dictG = {key: value for (key, value) in iterable}
其中iterable为可迭代的对象,比如list、tuple等
尝试使用字典生成式完成字典键值位置对调操作
12old_dict = {'x': 1, 'y': 2, 'z': 3}new_dict = {v: k for k,v in old_dict.items()}
运行结果:
1{1: 'x ...
Python算法:递归
递归算法,说不出来对它是种什么样的感受。硬要描述一下大概就是又爱又恨吧。给人的感觉就像给脑子里塞了个回旋加速器,很猛,但是很晕。
运行环境 Runtime environment123操作系统: Windos10 IDE: JetBrains Python 2018.2.4 x64 语言: Python 3.66
背景多层级数据的结构化处理、文件列表管理、算法…balabala递归的应用场景,是真的很多。
步步实现 递归最原始的递归函数,自己调用自己,无限循环,调用栈叠起来~
123def recursive_count_Decrement(v): print(v) return recursive_count_Decrement(v)
添加个跳出无限循环调用的基线条件
123456def recursive_count_Decrement(v): print(v) if v <= 1: return v else: return recursive_count_Decrement(v)
模拟一个情景,我有一个 ...
Python算法:归并排序
最近准备去找工作,时隔几年又要把在学校时代压床底的算法掏出来吹吹灰尘了,真有种朝花夕拾的感觉…哈哈哈哈毕竟如果面试要是写不出来,那真是太尴尬了。写那么一波插归并序找找感觉2333
运行环境 Runtime environment123操作系统: Windos10 IDE: JetBrains Python 2018.2.4 x64 语言: Python 3.66
背景比较高端的一种排序方式,在做排序的时候是个不错的选择。在我看来,归并和快速两种排序,在实际开发用到了,都是挺有逼格的。
归并排序在归并排序的时候,将数组不断的拆分为两半,直到数据只剩一个的时候,然后再按照大小顺序将拆分的数据组合起来。
123456789101112131415161718192021222324def merge_sort(nums): if len(nums) == 1: return nums mid = len(nums) // 2 left = merge_sort(nums[:mid]) right = merge_sort(nums[mid:] ...
Python算法:冒泡排序
最近准备去找工作,时隔几年又要把在学校时代压床底的算法掏出来吹吹灰尘了,真有种朝花夕拾的感觉…哈哈哈哈毕竟如果面试要是写不出来,那真是太尴尬了。写那么一波冒泡排序找找感觉2333
运行环境 Runtime environment123操作系统: Windos10 IDE: JetBrains Python 2018.2.4 x64 语言: Python 3.66
背景听名字就很萌的算法,也是比较简单的一种。好像是大学最先接触的算法?我已经记不真切了又好像选择排序才是第一个学..总之要用到的啦。
冒泡排序12345def bubble_sort(nums): for i in range(len(nums)): # 找出一个数 for j in range(len(nums)-i-1): # 找出这个数相邻的下一个数 if nums[j+1] > nums[j]: # 比较相邻的两个数谁大 nums[j+1], nums[j] = nums[j], nums[j+1] # 如果后一个数比前一个数 ...
Python算法:二分查找巩固
最近准备去找工作,时隔几年又要把在学校时代压床底的算法掏出来吹吹灰尘了,真有种朝花夕拾的感觉…哈哈哈哈毕竟如果面试要是写不出来,那真是太尴尬了。
运行环境 Runtime environment123操作系统: Windos10 IDE: JetBrains Python 2018.2.4 x64 语言: Python 3.66
背景我就说一句“要啥自行车?”。二分查找这玩意是啥查一查不是大把多解释的嘛?哈哈哈哈
算了,还是认真说一说吧。
使用情景这并不难理解。举个例子:
123456我要查字典中的一个汉字,“哦”。如果我按汉语拼音首字母从A一直翻到“哦”的汉语拼音首字母O,那将会是麻烦的一件事。这种时候,一般都会从字典的后半部分开始找会比较快。为什么呢?因为我们都知道字典的字母排序是有规律的,而O在26个字母后半部分,优先从后半部分开始找比从头A开始找更有效率。一半一半的排除,不断的缩小查找范围直到锁定目标,顾名思义这个就叫 二分查找 啦。
有序列表 二分查找实现在这里使用Python实现二分查找,代码如下:
123456789101112131415161718192 ...