数据类型总结:可变不可变

字符串、整数等都是不可变的,而list是可变的,tuple不可变。dict和set都是可变的

 

”不可变对象,只传递值”对于函数外的不可变对象在内部函数而言,就是只传了比如a的值,不能改变a的指向地址咯?意思就是可以调用值,但是不能运算。如下图:

 对于函数外面的对象,无论是可变对象还是不可变对象,在函数里都不要用 同名=同名的变化 这样的做法,会报错!!!也许是范围的问题。。。

对于函数外面的对象,无论是可变对象还是不可变对象,在函数里用 同名赋值,都仅仅是局部变量,跟外面的全局变量没有任何关系!!!

对于可变对象,函数内可以直接改变函数外的全局变量;而不可变对象不可改变,所以第90行报错!!!

 

 

对于不变对象来说,调用对象自身的任意方法,也不会改变该对象自身的内容。相反,这些方法会创建新的对象并返回,这样,就保证了不可变对象本身永远是不可变的。

>>> a = 'abc'
>>> b = a.replace('a', 'A')
>>> b
'Abc'
>>> a
'abc'

 

谈谈pop()和remove()2个方法的用法,前者是根据索引删除,后者是根据元素。

所以类似dict和set等无序的用remove()方法删除

 

tuple:另一种有序列表叫元组:tuple。tuple和list非常类似,但是tuple一旦初始化就不能修改。

dict和set都无序

 

dict:在Python中,字符串、整数等都是不可变的,因此,可以放心地作为key。而list是可变的,就不能作为key。

 

set:set和dict类似,也是一组key的集合,但不存储value。由于key不能重复,所以,在set中,没有重复的key。

 

tuple虽然是不变对象,但试试把(1, 2, 3)和(1, [2, 3])放入dict或set中,并解释结果。

 

和list比较,dict有以下几个特点:

  1. 查找和插入的速度极快,不会随着key的增加而变慢;
  2. 需要占用大量的内存,内存浪费多。

而list相反:

  1. 查找和插入的时间随着元素的增加而增加;
  2. 占用空间小,浪费内存很少。

所以,dict是用空间来换取时间的一种方法。

 

posted @ 2017-12-02 15:34  冬将至  阅读(690)  评论(1)    收藏  举报