這一章節說說共享引用python
咱們先舉一個樣例函數
a=1 b=a
1.建立一個對象1post
2.建立一個變量a優化
3.把a和1所在的內存空間鏈接起來。就是a引用1.net
4.a正在使用。建立變量bcode
5.a這個時候被對象1替代對象
6.b引用對象1blog
咱們如下舉另外兩個樣例:內存
>>> a=1.1 >>> b=1.1 >>> a is b False >>> a=1.1 >>> b=a >>> a is b True >>>
咱們再來舉一些樣例。你們可以思考一下get
a=1 b=a a='2'
事實上這個時候是這種。b=1。a='2'
再來,
a=1 b=a a=a+1
由於咱們以前已經說過,整數類型對象是不可變。因此,最後的結果是a=2,b=1,2這個對象是又一次建立出來,而後賦值給a,因此不會出現a變b也變的狀況
上面咱們都是引用一些不可變的對象類型,咱們如下引用一些可變的看看如何?
>>> a=[1,2,4] >>> b=a >>> b is a True >>> a=24 >>> b is a False >>> a 24 >>> b [1, 2, 4] >>>
>>> a=[1,2,4] >>> b=a >>> b is a True >>> a[0]=5 >>> b is a True >>> a [5, 2, 4] >>> b [5, 2, 4] >>>
假設不想出現這樣的狀況,咱們可以使用copy這個函數。或者使用分片
>>> a=[1,2,4] >>> b=a[:] >>> b is a False >>> a [1, 2, 4] >>> b [1, 2, 4] >>>經過上面的代碼可以看見,a和b事實上是引用兩個不一樣的對象。僅僅只是他們的值一樣
分片一般是用在元組,假設是列表或者字典,則必須使用copy
假設對象裏面還有可變對象類型,那麼需要使用deepcopy這個函數,否則仍是會出現a變b變的狀況
仍是上面的代碼。咱們在最後加一句
>>> a=[1,2,4] >>> b=a[:] >>> b is a False >>> a [1, 2, 4] >>> b [1, 2, 4] >>> a==b True >>>
就講到這裏,謝謝你們
------------------------------------------------------------------