码迷,mamicode.com
首页 > 编程语言 > 详细

Python错题集

时间:2018-05-07 23:50:04      阅读:218      评论:0      收藏:0      [点我收藏+]

标签:错题   分析   Python   总结   

知错能改

1.设置变量a=2, 变量b=a, 然后再设置a=3, 此时再查看b也会等于3


  • 答案解析:

变量a=2, b=a, 再将a=3后,此时查看a的结果是3,但b的结果依然是2,因为b=a其实不将b变量指向了a,而是把b的值 指向在了a变量所指向的值 ,如果 a 之后又改成了3,python解释器会开辟一块新的内存空间并将值 存为3,然后a内存的指针就指向了3的地址,但2所在的内存地址是不变的,既然b指向了2的地址,所以b的值依然是2


总结:
+=对于可变对象(dict,list)来说,以最小动作为基础,是在原处修改的
= 另外的是生成了一个新的对象

知识点:垃圾回收

1. 小整数对象池

整数在程序中的使用非常广泛,Python为了优化速度,使用了小整数对象池, 避免为整数频繁申请和销毁内存空间。

Python 对小整数的定义是 [-5, 257) 这些整数对象是提前建立好的,不会被垃圾回收。在一个 Python 的程序中,所有位于这个范围内的整数使用的都是同一个对象.

同理,单个字母也是这样的。

但是当定义2个相同的字符串时,引用计数为0,触发垃圾回收

2. 大整数对象池

每一个大整数,均创建一个新的对象。

3. intern机制

a1 = "HelloWorld"
a2 = "HelloWorld"
a3 = "HelloWorld"
a4 = "HelloWorld"
a5 = "HelloWorld"
a6 = "HelloWorld"
a7 = "HelloWorld"
a8 = "HelloWorld"
a9 = "HelloWorld"
python会不会创建9个对象呢?在内存中会不会开辟9个”HelloWorld”的内存空间呢? 想一下,如果是这样的话,我们写10000个对象,比如a1=”HelloWorld”…..a1000=”HelloWorld”, 那他岂不是开辟了1000个”HelloWorld”所占的内存空间了呢?如果真这样,内存不就爆了吗?所以python中有这样一个机制——intern机制,让他只占用一个”HelloWorld”所占的内存空间。靠引用计数去维护何时释放。

总结:垃圾回收

  • 小整数[-5,257)共用对象,常驻内存
  • 单个字符共用对象,常驻内存
  • 单个单词,不可修改,默认开启intern机制,共用对象,引用计数为0,则销毁 单词垃圾回收
  • 字符串(含有空格),不可修改,没开启intern机制,不共用对象,引用计数为0,销毁
  • 大整数不共用内存,引用计数为0,销毁 大整数垃圾回收
  • 数值类型和字符串类型在 Python 中都是不可变的,这意味着你无法修改这个对象的值,每次对变量的修改,实际上是创建一个新的对象 不可变

Python错题集

标签:错题   分析   Python   总结   

原文地址:http://blog.51cto.com/13736429/2113785

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!