python笔记-可变对象与不可变对象

        python中,万物皆对象。所有的对象可以分为可变对象不可变对象两类。当变量引用不可变对象时,使用该变量的任何操作,都会创建新对象,而不会改变引用的对象。与此相反,变量引用可变对象时,或者可能创建新的对象,或者改变被引用的对象本身,这取决于进行的何种操作。

       1.可变对象与不可变对象

        可变对象是指对象的内容可变,包括字典(dictionary)、列表(list)

        不可变对象是指对象的内容不可变,包括int、字符串(string)、浮点型(float)、数值型(number)、元组(tuple)

         2.对不可变对象的操作

         这里举一个简单的例子。

>>>myInt = 27
>>>yourInt = myInt
>>>yourInt
27
>>>yourInt = yourInt + 5
>>>myInt
27
>>>yourInt
32
          当声明  myInt = 27 和  yourInt = myInt 后,myInt 和 yourInt 指向了同一个对象27。当执行  yourInt = yourInt +5后,由于int类型为不可变对象,yourInt会指向一个新的对象32。

       3.对可变对象的操作

>>>list1 = [1,2,3]
>>>list1
[1,2,3]
>>>list2 = list1
>>>list2
[1,2,3]
>>>list1 is list2
True
>>>list1.append(27)
>>>list1
[1,2,3,27]
>>>list2
[1,2,3,27]
          对list1做的改变也影响了list2!这是因为list1和list2都引用了同一个对象。由于是可变对象,除非你要求,否则Python不会保存副本,他会通过重用保存已存在的对象来节省空间。

         说到这里,可能有的小伙伴想问,如果想复制列表,而不是引用同一个对象该怎么办,这时候可以改用分片[:]的方法,如下所示:

>>>list1 = [1,2,3]
>>>list1
[1,2,3]
>>>list2 = list1[:]
>>>list1 is list2
False
>>>list2
[1,2,3]
>>>list1.append(27)
>>>list1
[1,2,3,27]
>>>list2
[1,2,3]
        4.总结

       在 python中,当变量引用不可变对象时,使用该变量的任何操作(连接、替换、去除等),都会创建新对象,而不会改变引用的对象。与此相反,变量引用可变对象时,或者可能创建新的对象,或者改变被引用的对象本身,这取决于进行的何种操作。例如,L = [1,2,3],L=  L + [9]和L.append(9)得到的结果都是列表[1,2,3,9]。然而,前者创建了一个新对象,后者却没有。


           


       


              

         

        

        

猜你喜欢

转载自blog.csdn.net/l947069962/article/details/75145324