Python数据存储

Computer Components

一个计算机必须能做4件事:

  1. 接受输入
  2. 产生输出
  3. 存储数据
  4. 执行计算

Data Storage

程序中的变量存放在内存中,可以快速的进行访问,而像数据文件这样的数据一般很大存放在硬盘中,访问速度很慢。下面显示的是内存中的存储情况,一个格子是一个byte,发现短整型数据占一个byte,strings的每一个字符占一个byte。利用id(my_var)可以获取到该变量的内存地址。

这里写图片描述

my_int = 10
int_addr = id(my_int)
my_str = "Hello World"
str_addr = id(my_str)
print(int_addr)
print(str_addr)
'''
10106112
139965952532272
'''

Low-Level And High-Level Programming Languages

前面提到的一个短整型数据占一个byte,一个字符串的每一个字符占一个内存,这是针对低级编程语言,比如C,它与内存的显示的进行交互,当可以直接申请一个长度的byte给一个变量,这样对计算机系统抽象化不够好。而Python这样的高级编程语言,它能够快速轻松的表达逻辑,那么这种方便也带来了一些代价,就是内存的利用率没有C的高,Python的strings和interger都存储为str何int类的对象。

低级程序语言有精确的内存管理以及在机器级别的优化。高级编程语言对于做任务来说很方便,因为他不需要知道内部优化,因为没有内存的限制。对于很多任务来说,内存并不是最需要关心的事情,高级编程语言需要最大限度地提高开发人员的生产力。

  • 比如下面这个字符串翻转的功能:
    这里写图片描述
    这里写图片描述

很明显,python的代码更为简单,而C首先代码很长,其次还需要预先获取一个内来确保这个内存大小合适,而在高级语言中是不需要关心这个问题的。

Data Storage In Python

  • 在Python中可以利用sys包中的getsizeof()这个函数来获取一个变量占据了多少个byte:
import sys
my_int = 200
size_of_my_int = sys.getsizeof(my_int)
print(size_of_my_int)
int1 = 10
int2 = 100000
str1 = "Hello"
str2 = "Hi"
int_diff = sys.getsizeof(int1) - sys.getsizeof(int2)
print(int_diff)
str_diff = sys.getsizeof(str1) - sys.getsizeof(str2)
print(str_diff)
'''
28
0
3
'''

-

Integers And Strings In Memory

  • 在上一个例子中我们看到10和100000所占的内存相同,表示整型数据站的内存相同,除非这个非常非常的大,才需要更多的内存。 一个整型数据占据28个byte,一个字符占一个byte.

Disk Storage

f = open("list.csv", "r")
list = list(csv.reader(f))
  • 像上面这样的list.csv一般是存储在硬盘上的,需要利用open和csv.reader将其从硬盘中读入到内存中,我们可以利用time模块中的time.clock()这个函数来获取处理器当前时间,通过时间差得到硬盘文件处理的时间。下面这段代码比较了内存和硬盘对数据的处理时间:
import time
import csv
before_file_read = time.clock()
f = open("list.csv", "r")
list_from_file = list(csv.reader(f))
after_file_read = time.clock()
file_time = after_file_read - before_file_read
print(file_time)

before_string_parse = time.clock()
list_from_string = "1,2,3,4,5,6,7,8,9,10".split(",")
after_string_parse = time.clock()
RAM_time = after_string_parse - before_string_parse
print(RAM_time)
'''
0.00018099999999998673
4.700000000013027e-05
'''
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值