Chinaunix首页 | 论坛 | 博客
  • 博客访问: 29309106
  • 博文数量: 2065
  • 博客积分: 10377
  • 博客等级: 上将
  • 技术积分: 21525
  • 用 户 组: 普通用户
  • 注册时间: 2008-11-04 17:50
文章分类

全部博文(2065)

文章存档

2012年(2)

2011年(19)

2010年(1160)

2009年(969)

2008年(153)

分类: Python/Ruby

2010-07-19 22:55:08

内容大部分转载自网络








答:
1、Python提供了对内存的垃圾收集机制,但是它将不用的内存放到内存池而不是返回给操作系统。
Python中所有小于256个字节的对象都使用pymalloc实现的分配器,而大的对象则使用系统的 malloc。另外Python对象,如整数,浮点数和List,都有其独立的私有内存池,对象间不共享他们的内存池。也就是说如果你分配又释放了大量的 整数,用于缓存这些整数的内存就不能再分配给浮点数。
在Python中,许多时候申请的内存都是小块的内存,这些小块内存在申请后,很快又会被释放,由于这些内存 的申请并不是为了创建对象,所以并没有对象一级的内存池机制。这就意味着Python在运行期间会大量地执行malloc和free的操作,频繁地在用户 态和核心态之间进行切换,这将严重影响Python的执行效率。为了加速Python的执行效率,Python引入了一个内存池机制,用于管理对小块内存 的申请和释放。这也就是之前提到的Pymalloc机制。

结论:
1、Python实现了对内存的垃圾收集机制类似于GC的功能
2、当Python处理小于256字节的对象(当然这个值是可以调整)。是从内存池分配内存的,当处理大对象的时候是需要直接malloc到实际的物理内存。
3、对象间不共享他们的内存池。

答2:
1、考虑内置方法能否实现。发现可以使用reverse来实现序列的反转处理
代码:
a=[1,2,3,4]
a.reverse()
for i in a:
    print i
2、考虑到[]能够从前往后读还可以从后往前读所以
代码:
a=[1,2,3,4]
for i in xrange(1,len(a)+1):
    print a[-i]
a=[1,2,3,4]
for x in a[::-1]:print x

答案3.
分别使用tuple 与list内置函数即可转化

答案4.
d=[1,1,2,2,3,4]
e = []
for ele in d:
    if ele in e:pass
    else:
        e.append(ele)
print e

答案6.
import random
随机整数:print random.randint(0,99)
随机小数:print random.random()


答案7.邮件发送模块使用smtplib即可具体的API可参考


新加内容:
8、python里面如何拷贝对象的?
答:copy.copy 浅拷贝 只拷贝父对象,不会拷贝对象的内部的子对象。
copy.deepcopy
深拷贝 拷贝对象及其子对象 。参考http://blog.chinaunix.net/u2/84280/showart_2251862.html

9、Python中的pass的作用是什么?
pass语句什么也不做,一般作为占位符或者创建占位程序,pass语句不会执行任何操作。




阅读(761) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~