首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么调用.clear()后的字典大小是72字节,而实例化字典时是240字节?

调用.clear()方法后的字典大小是72字节,而实例化字典时是240字节的原因是因为字典在Python中是一种动态数据结构,它可以根据需要动态地调整大小以容纳更多的元素。字典的大小取决于其中存储的元素数量和元素的类型。

当我们实例化一个字典时,Python会为字典分配一块内存空间来存储键值对。这个内存空间的大小是根据字典的初始容量来确定的,初始容量越大,分配的内存空间就越大。因此,实例化字典时的大小是240字节。

而调用.clear()方法后,字典中的所有键值对都被删除,但是字典对象本身的内存空间并没有释放。这是因为Python解释器为了提高性能,会保留一部分内存空间以备将来再次使用。这部分保留的内存空间可以用来存储新的键值对,避免频繁的内存分配和释放操作。因此,调用.clear()方法后的字典大小是72字节。

需要注意的是,字典的大小可能会随着操作的进行而动态变化。当字典中的元素数量增加时,字典会自动调整大小以容纳更多的元素,这可能会导致字典的大小增加。因此,字典的大小并不是固定的,它会根据实际情况进行调整。

推荐的腾讯云相关产品:腾讯云数据库TencentDB、腾讯云云服务器CVM、腾讯云对象存储COS。

腾讯云数据库TencentDB:https://cloud.tencent.com/product/cdb

腾讯云云服务器CVM:https://cloud.tencent.com/product/cvm

腾讯云对象存储COS:https://cloud.tencent.com/product/cos

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Python 内存分配小秘密

本文将会频繁地使用该模块 getsizeof() 方法,因此,我先简要介绍一下: 该方法用于获取一个对象字节大小(bytes) 它只计算直接占用内存,不计算对象内所引用对象内存 这里有个直观例子...对于我们熟知一些空对象,例如空字符串、空列表、空字典等等,不知道大家是否曾好奇过,是否曾思考过这些问题: 空对象是不是不占用内存呢?如果占内存,那占用多少呢?为什么这样分配呢?...: 超额分配机制:申请新内存并不是按需分配,而是多分配一些,因此当再添加少量元素,不需要马上去申请新内存 非均匀分配机制:三类对象申请新内存频率不同同一类对象每次超额分配内存并不是均匀...() # 清空:set() c.clear() # 清空:{},也即 dict() 调用 clear() 方法,我们就获得了几个空对象。...# 承接前面的清空操作: sys.getsizeof(a) # 64 sys.getsizeof(b) # 224 sys.getsizeof(c) # 72 空列表与空元组大小不变,然而空字典72

45110

Python 内存分配小秘密

本文将会频繁地使用该模块getsizeof()方法,因此,我先简要介绍一下: 该方法用于获取一个对象字节大小(bytes) 它只计算直接占用内存,不计算对象内所引用对象内存 这里有个直观例子...对于我们熟知一些空对象,例如空字符串、空列表、空字典等等,不知道大家是否曾好奇过,是否曾思考过这些问题: 空对象是不是不占用内存呢?如果占内存,那占用多少呢?为什么这样分配呢?...由此能看出可变对象在扩充秘密: 超额分配机制:申请新内存并不是按需分配,而是多分配一些,因此当再添加少量元素,不需要马上去申请新内存 非均匀分配机制:三类对象申请新内存频率不同同一类对象每次超额分配内存并不是均匀...() # 清空:set() c.clear() # 清空:{},也即 dict() 调用 clear() 方法,我们就获得了几个空对象。...# 承接前面的清空操作: sys.getsizeof(a) # 64 sys.getsizeof(b) # 224 sys.getsizeof(c) # 72 空列表与空元组大小不变,然而空字典72

90931
  • Python字典与散列表

    ,必须可散列对象,因为字典基于散列表创建。...此外,当创建一个空字典,它同时创建一个Python散列表,其中包含8个存储容器,长度只有240字节,因此字典中增加了第一个元素,根本没有改变其大小。...这是为了使Python散列表更快并减少冲突,所以当字典充满三分之二,解释器会调整字典大小 。 现在,将上面所创建字典元素都删除了,再看一看该字典大小。...之所以如此,就是由于字典内存占用非常小,并且在使用字典删除操作并不频繁,因此与每次删除动态调整字典大小,解释器更愿意浪费一点空间。...但是,如果通过调用.clear()方法清空字典,由于它是批量删除,因此释放了空间,并且最小达到72字节

    4.7K10

    你写 Python 代码也需要减肥!

    但是,让我们看看 dict 在内容中占用空间大小: >>> print(sys.getsizeof(ob)) 240 如上所示,dict 占用了大量内存,尤其如果突然虚需要创建大量实例实例数...称之为到该对象弱引用(weak reference);字段 __dict__ 该类实例字典引用,其中包含实例属性值(注意在 64-bit 引用平台中占用 8 字节)。...(ob)) 72 由于内存中元组还包含字段数,因此需要占据内存 8 个字节,多于带有 __slots__ 类: 字段 大小字节) PyGC_Head 24 PyObject_HEAD 16 ob_size...但大量实例占用内存也会稍稍多一些: 实例大小 1 000 000 72 Mb 10 000 000 720 Mb 100 000 000 7.2 Gb 05.记录类:不带循环 GC 可变更命名元组...它会创建几乎与 namedtuple 完全一致子类,但支持给属性赋新值(不需要创建新实例)。

    80830

    你写 Python 代码可以更“瘦”

    但是,让我们看看 dict 在内容中占用空间大小: >>> print(sys.getsizeof(ob)) 240 如上所示,dict 占用了大量内存,尤其如果突然虚需要创建大量实例实例数...称之为到该对象弱引用(weak reference);字段 __dict__ 该类实例字典引用,其中包含实例属性值(注意在 64-bit 引用平台中占用 8 字节)。...(ob)) 72 由于内存中元组还包含字段数,因此需要占据内存 8 个字节,多于带有 __slots__ 类: 字段 大小字节) PyGC_Head 24 PyObject_HEAD 16 ob_size...但大量实例占用内存也会稍稍多一些: 实例大小 1 000 000 72 Mb 10 000 000 720 Mb 100 000 000 7.2 Gb 记录类:不带循环 GC 可变更命名元组...它会创建几乎与 namedtuple 完全一致子类,但支持给属性赋新值(不需要创建新实例)。

    64530

    如何降低 Python 内存消耗量?

    但是,让我们看看dict在内容中占用空间大小: >>> print(sys.getsizeof(ob)) 240 如上所示,dict占用了大量内存,尤其如果突然虚需要创建大量实例实例数 对象大小...(weak reference);字段__dict__该类实例字典引用,其中包含实例属性值(注意在64-bit引用平台中占用8字节)。...(ob)) 72 由于内存中元组还包含字段数,因此需要占据内存8个字节,多于带有__slots__类: 字段 大小字节) PyGC_Head 24 PyObject_HEAD 16 ob_size...但大量实例占用内存也会稍稍多一些: 实例大小 1 000 000 72 Mb 10 000 000 720 Mb 100 000 000 7.2 Gb ?...它会创建几乎与namedtuple完全一致子类,但支持给属性赋新值(不需要创建新实例)。

    1.5K20

    你所使用Python对象占用了多少内存?(附代码)

    空元组开销56字节,空list72字节。如果你数据结构包括许多小不可变序列,那么每个序列之间所差这16字节一个非常容易实现目标。...当一个10字节大小对象被分配,它会从16字节池中分配出大小为9-16字节对象。因此,即便他只包含10字节数据,但它还是会花费16字节内存。...如果1,000,000个10字节大小对象被分配,实际使用内存16,000,000字节不是10,000,000个字节。这其中多出60%开销显然微不足道。...更具讽刺意义,如果你使用处理模块来运行程序多个实例,那么就会严重限制你在给定计算机上可以运行实例数。...目前尚不清楚为什么第8行第一个range(1000)循环增加了4.2MB,第10行第二个循环只增加了0.4MB,第12行第三个循环增加了0.8MB。

    97230

    Python3使用过程中需要注意

    格式输出 %s就是代表字符串占位符,除此之外,还有%d,数字占位符,想要输出百分号加双重百分号即可 info=''' 字符串1:%s 整型2:%d 字符串3:%s '''%('1',2,'...不支持中文 Unicode(万国码)     UCS -2 使用2个字节       UCS -4 使用4个字节    UTF-8        万国码升级版        一个中文字符=三个字节...、英文一个字节、欧洲2个字节、亚洲3个字节 GBK        国标        一个中文字符=2个字节、英文一个字节 GBK转UTF-8需通过媒介Unicode 数据类型方面 如何判断是否为可变数据类型...list.remove(obj):删除列表中第一个obj匹配项 list.clear():清空列表 dict 字典无序可变 radiansdict.clear():删除字典内所有元素 radiansdict.copy...魔术方法可以理解为python代码和解释器一种规约,python类在实例化时首先调用__new__去创建一个对象再__init__去初始这个new出来对象,所以__new__这个方法必须返回一个对象

    1.6K50

    Python 面试题大全系列(一)

    __ 和 __init__ 区别 __new__实例创建之前被调用,因为它任务就是创建实例然后返回该实例对象,个静态方法。...__init__实例对象创建完成调用,然后设置对象属性一些初始值,通常用在初始一个类实例时候。一个实例方法。...4、如果__new__创建当前类实例,会自动调用__init__函数,通过 return 语句里面调用__new__函数第一个参数 cls 来保证当前类实例,如果其他类类名,;那么实际创建返回就是其他类实例...在调用基类方法,需要加上基类类名前缀,且需要带上 self 参数变量。区别于在类中调用普通函数并不需要带上 self 参数。...工厂模式:包涵一个超类,这个超类提供一个抽象接口来创建一个特定类型对象,不是决定哪个对象可以被创建。

    95532

    Python 3 学习笔记:序列

    我们知道数字可以比较大小,那么序列(如字符串、列表等)如何比较大小呢?...但是,根据编码方式不同,字符所占字节数也不同(这里主要针对汉字,如采用 GBK/GB2312 编码,汉字占 2 个字节如果采用 UTF-8/unicode 编码,则汉字占 3 或 4 个字节。...(symbol) 复制 格式字符串 格式字符串指先制定一个模版,在这个模版中预留几个空位,然后再根据需要填上相应内容。...字典具有一下特征; 通过 键 不是索引来读取 字典任意对象无需集合 字典可变,并且可以任意嵌套 字典 键 必须唯一 字典 键 必须不可变 创建字典 定义字典,每个元素都包含两个部分...删除字典 删除字典同样可以使用 del 关键字, 1 del dictionary 复制 如果不想删除字典只是想删除其中全部元素,则可以使用 clear() 方法, 1 dictionary.clear

    2.2K10

    Python在计算内存时值得注意几个问题

    文档中关于这个方法介绍有两层意思: 该方法用于获取一个对象字节大小(bytes) 它只计算直接占用内存,不计算对象内所引用对象内存 也就是说,getsizeof() 并不是计算实际对象字节大小...也就是说:getsizeof() 方法在计算列表大小时,其结果跟元素个数相关,但跟元素本身大小无关。 下面再看看字典例子: ?...,它在计算 Python 对象大小时,只跟该对象结构体属性相关,没有进一步作“深度计算”。...但是不包括列表、元组和字典等在内部存在引用关系类型。 为什么不推广到所有内置类型上呢?我未查到这方面的解释,若有知情同学,烦请告知。 ?...同理,对于单个 item,比如列表中数字 1,sys.getsizeof(1) 等于 14, pympler 会算成对齐数值 16,所以汇总起来 40+16+16=72 字节

    2.5K40

    web选手简单二进制(下篇)

    } 第一个thiswebserverthis,这个this再后面用于initmsghandlermap初始。...接下来将this+240这个指针(就是this指针偏移240字节)传递给agent作为初始化用。也就是说webserver对象指针偏移240字节位置保存了一个指向agent对象指针。...如果判断agent初始返回值是否等于-1,如果等于说明初始失败。下面汇编,对着看可以看很清楚。...其中0F0h16进制240. 0x04 vector和map vector 这里展示向一个vector向量里添加字符串元素,图里vector对象是this+1552(同样理解,当前对象...这个函数指针也就是对应到具体字典值 0x05 字节数与结构体偏移 ida里伪代码有时候会以数组方式对结构体进行寻址,这时候每个下标都是8字节结构体里每个成员大小并不都是8个字节,因此下标会和结构体成员对不上

    18820

    《redis设计与实现》1-数据结构与对象篇

    还做了自己数据结构优化 redis为什么单线程 单线程已经很快了,减少多线程带来网络开销,锁操作 后续4.0版本在考虑多线程 单线程指处理网络请求时候只有一个线程,并不是redis-server...):禁止驱逐数据 使用注意 redis单线程无法发挥多核cpu性能,可以通过单机开多个redis实例来完善 redis实现分布式锁:先用setnx(如果不存在才设置)争抢锁,抢到,expire设置过期时间...预分配策略: 修改SDS长度(len值)< 1MB,预分配同样len大小空间 修改SDS长度(len值)>= 1MB,预分配1MB大小空间 惰性空间释放 用于优化SDS字符缩短操作...升级好处 提高灵活性 节约内存 压缩列表 ziplist列表键和哈希键底层实现之一 redis为了节约内存开发顺序型数据结构 当列表键只包含少量列表项,且每个列表项要么小整数,要么短字符串...zllen uint16_t 2字节 节点数量,小于65535实际值,超过时需要遍历才能算出 entryN 列表节点 不定 包含各个节点 zlend uint8_t 1字节 特殊值0xFF,末端标记

    56760

    Python入门学习(二)

    (3)clear()和copy() clear()清空字典 copy()相当于复制出一个新字典,两者互不影响,赋值=仅是将内存字典地址赋值出去,两者共同指向一个地址 (4)pop()和popitem...每一个汉字,字母或数字或特殊符号都算是一个字符,字节字符所占位数大小,例如一个字母字符一个字节,一个汉字字符两个字节。...8.1 类方法self参数含义 在Python中类方法都要有self参数,实质为对类实例对象绑定从而使得在类实例对象调用方法能够确认出对哪个对象进行操作,与C里面的this指针一样...在python中通过class类来定义一个类,类定义好就是一个类对象,通过类对象实例之后对象就称之为类实例对象。...一般类内定义方法和属性都是静态,其作用域为全局作用域,实例对象中方法和属性动态

    1.5K81

    干货 | 携程百亿级缓存系统探索之路——本地缓存结构选型与内存压缩

    当然,对于某些特殊场景,也可根据需要来设计定制结构与锁机制来达到更优性能。 经过上面的简单分析,我们可以暂时认为线程安全数组和散列表一个较优用以承载缓存数据结构。...其内部除了存储了键值对数据外,同时存储了节点哈希值以及当其在链表或红黑树中,其下个Node节点引用。 那么,我们可以依据其内部结构如计算出一个Node实例字节数为32个字节。...3.1.3 字典编码 字典编码把整体重复性高数据进行去重建立字典,把原来存放数据地方变为指向实体字典引用编码方式。因为引用指针依然占存,因此适合单个实例数据字段较多数据缓存。...那么编码前旧数据字典Key为Date类型,编码新数据字典类型则可以转化为更小更泛用int型。 下表在N天连续日期查整型场景下,原生HashMap与编码整型数组耗存对照表。...在实际处理过程中,我们会先将房型数据实体进行序列后转换为MD5,在房型字典中只存储MD5编码,实体字典中存储MD5到实际房型信息实体关系。

    1.2K20

    干货 | 携程百亿级缓存系统探索之路——本地缓存结构选型与内存压缩

    当然,对于某些特殊场景,也可根据需要来设计定制结构与锁机制来达到更优性能。 经过上面的简单分析,我们可以暂时认为线程安全数组和散列表一个较优用以承载缓存数据结构。...其内部除了存储了键值对数据外,同时存储了节点哈希值以及当其在链表或红黑树中,其下个Node节点引用。 那么,我们可以依据其内部结构如计算出一个Node实例字节数为32个字节。...3.1.3 字典编码 字典编码把整体重复性高数据进行去重建立字典,把原来存放数据地方变为指向实体字典引用编码方式。因为引用指针依然占存,因此适合单个实例数据字段较多数据缓存。...那么编码前旧数据字典Key为Date类型,编码新数据字典类型则可以转化为更小更泛用int型。 下表在N天连续日期查整型场景下,原生HashMap与编码整型数组耗存对照表。...在实际处理过程中,我们会先将房型数据实体进行序列后转换为MD5,在房型字典中只存储MD5编码,实体字典中存储MD5到实际房型信息实体关系。

    1K30

    Python 3基础语法知识点都在这里了,如果还不能入门就不能怪我了

    返回输入变量类型,如果变量字典就返回字典类型 key in dict 判断键是否存在于字典字典方法 dict.clear() 删除字典内所有元素 dict.copy() 返回一个字典浅复制...对象是类实例。 方法:类中定义函数。 类变量:类变量在整个实例对象中公用。类变量定义在类中且在函数体之外。类变量通常不作为实例变量使用。...类实例,可以使用其属性,实际上,创建一个类之后,可以通过类名访问其属性。...在定义类,类名括号中指定要继承父类,多个父类之间用逗号分隔。 子类实例可以完全访问所继承所有父类非私有属性和方法。...如果指定了一个非负数参数,则返回指定大小字节数,包括 “ ” 字符。

    1.9K30

    Python 3 入门 ,看这篇就够了 。

    ) 返回输入变量类型,如果变量字典就返回字典类型 key in dict 判断键是否存在于字典字典方法 dict.clear() 删除字典内所有元素 dict.copy() 返回一个字典浅复制...对象是类实例。 方法:类中定义函数。 类变量:类变量在整个实例对象中公用。类变量定义在类中且在函数体之外。类变量通常不作为实例变量使用。...类实例,可以使用其属性,实际上,创建一个类之后,可以通过类名访问其属性。...在定义类,类名括号中指定要继承父类,多个父类之间用逗号分隔。 子类实例可以完全访问所继承所有父类非私有属性和方法。...如果指定了一个非负数参数,则返回指定大小字节数,包括 “\n” 字符。

    1.2K20
    领券