面试题答案
一键面试- 内存占用差异:
- 列表(list):列表是可变的数据类型,它的内存分配需要考虑元素的动态添加和删除。为了实现这种灵活性,列表在内存中除了存储元素本身外,还需要额外的空间来记录列表的长度、元素的存储位置等信息。并且由于其可变性质,当添加元素超过当前分配空间时,会重新分配内存,复制原有元素到新内存地址,这会带来额外的内存开销。
- 元组(tuple):元组是不可变的数据类型,一旦创建,其内容和长度就不能改变。所以元组的内存分配相对简单且固定,它在内存中存储元素以及记录元组长度等基本信息,不需要额外考虑动态变化的情况,因此在相同元素的情况下,通常元组的内存占用会比列表少。
- 代码示例:
import sys
# 创建包含相同元素的列表和元组
my_list = [1, 2, 3, 4, 5]
my_tuple = (1, 2, 3, 4, 5)
# 查看列表的内存占用
list_memory = sys.getsizeof(my_list)
print(f"列表的内存占用: {list_memory} 字节")
# 查看元组的内存占用
tuple_memory = sys.getsizeof(my_tuple)
print(f"元组的内存占用: {tuple_memory} 字节")
上述代码使用sys.getsizeof()
函数来获取列表和元组在内存中的字节数。sys.getsizeof()
函数返回对象占用的内存大小,单位是字节。运行代码后可以直观看到相同元素情况下列表和元组内存占用的差异。