最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python3中的指針你了解嗎

 更新時間:2024年02月28日 08:54:59   作者:DECHIN  
Python這個編程語言雖然沒有指針類型,但是Python中的可變參量也可以像指針一樣,改變一個數(shù)值之后,所有指向該數(shù)值的可變參量都會隨之而改變,這篇文章主要介紹了Python3中的“指針”,需要的朋友可以參考下

技術(shù)背景

在python中定義一個列表時,我們一定要注意其中的可變對象的原理。雖然python的語法中沒有指針,但是實際上定義一個列表變量時,是把變量名指到了一個可變對象上。如果此時我們定義另外一個變量也指到同一個可變對象的話,就會造成一個“聯(lián)動”的現(xiàn)象。也就是改變其中的一個值時,另一個值也會隨之而改變。本文使用的Python版本為Python 3.7.13

測試案例

這里我們先定義一個列表a,然后把這個空的列表a直接賦值給變量b,此時a和b都是一個空的列表:

In [1]: a = []
In [2]: b = a
In [3]: print (a,b)
[] []

那么如果此時我們修改a的值,那么此前被a賦值的變量b是否也會隨之改變呢?

In [4]: a.append(1)
In [5]: print (a,b)
[1] [1]
In [6]: a.append(2)
In [7]: print (a,b)
[1, 2] [1, 2]
In [8]: a = [3]
In [9]: print (a,b)
[3] [1, 2]
In [10]: a.append(4)
In [11]: print (a,b)
[3, 4] [1, 2]
 

從運行結(jié)果來看,我們可以發(fā)現(xiàn),當(dāng)對a先后擴展一個元素1和2時,變量b的值也隨之改變,跟a是同步變化的。但是如果把a這個變量名指向一個新的列表上,此時b的值不會發(fā)生變化。這就相當(dāng)于,給變量a賦新的值的時候,變量b指向了a原來的值,而a這個變量名指向了新的數(shù)值,此后兩者之間的關(guān)聯(lián)就消失了。之所以沒有指針定義的python編程語言,會出現(xiàn)這樣的情況,就是因為列表類型屬于可變參量,所以如果把兩個變量指向同一個列表,兩個變量的值是會同步的,即使初始的列表不是一個空的列表,結(jié)果也是一樣的:

In [23]: a = [1]
In [24]: b = a
In [25]: a += [2]
In [26]: print (a,b)
[1, 2] [1, 2]

而且這個同步還是雙向的,也就是說,修改a會同步到b,修改b也會同步到a:

In [11]: a = []
In [12]: b = a
In [13]: b.append(5)
In [14]: print (a,b)
[5] [5]

那么除了列表這個數(shù)據(jù)結(jié)構(gòu)之外,其他類型的數(shù)據(jù)結(jié)構(gòu)是否存在類似的現(xiàn)象呢?首先用字典類型來測試一下:

In [10]: a = {}
In [11]: b = a
In [12]: print (a,b)
{} {}
In [13]: a[1]=1
In [14]: print (a,b)
{1: 1} {1: 1}

經(jīng)過測試我們發(fā)現(xiàn),字典也是屬于可變參量的類型。除了列表和字典外,其他的就是普通的數(shù)值類型和元組Tuple類型,還有一些第三方定義的數(shù)據(jù)類型,也可以分別測試一下:

In [15]: a = 1
In [16]: b = a
In [17]: a += 1
In [18]: print (a,b)
2 1
In [19]: a = (1,)
In [20]: b = a
In [21]: a += (2,)
In [22]: print (a,b)
(1, 2) (1,)
In [23]: a = '1'
In [24]: b = a
In [25]: a += '2'
In [26]: print (a,b)
12 1
 

測試結(jié)果表明,數(shù)值類型和元組類型在“鏈?zhǔn)?rdquo;賦值之后,是直接把值給了其他變量的,而不是傳遞一個指針。但是另一個需要引起重視的是,第三方numpy所定義的array,也是一個可變參量:

In [15]: a = 1
In [16]: b = a
In [17]: a += 1
In [18]: print (a,b)
2 1
In [19]: a = (1,)
In [20]: b = a
In [21]: a += (2,)
In [22]: print (a,b)
(1, 2) (1,)
In [23]: a = '1'
In [24]: b = a
In [25]: a += '2'
In [26]: print (a,b)
12 1
 

可以發(fā)現(xiàn),a和b兩者的結(jié)果也是同步變化的。因為沒研究過Python的底層實現(xiàn),也許區(qū)分可變參量和非可變參量的方法,就是看其能不能被哈希?

In [15]: hash(1)
Out[15]: 1
In [16]: hash([1])
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-16-0579e98ca3ee> in <module>
----> 1 hash([1])
TypeError: unhashable type: 'list'
In [17]: hash({'1':1})
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-17-b18acecf6a20> in <module>
----> 1 hash({'1':1})
TypeError: unhashable type: 'dict'
In [18]: hash((1,))
Out[18]: 3430019387558
In [29]: hash(np.array([1.]))
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-29-b9e8d96de6be> in <module>
----> 1 hash(np.array([1.]))
TypeError: unhashable type: 'numpy.ndarray'
In [30]: hash(np.array([1.]).tobytes())
Out[30]: 1211024724661850177

從結(jié)果中我們發(fā)現(xiàn),那些可以被哈希的類型都是非可變參量,也就是在“鏈?zhǔn)劫x值”的過程中不會發(fā)生“聯(lián)動”的類型。

總結(jié)概要

假如你在Python中初始化了一個變量a的值,然后用a來初始化另一個變量b,此時你希望得到的b的數(shù)值是跟a同步變化的,還是獨立變化的呢?Python這個編程語言雖然沒有指針類型,但是Python中的可變參量也可以像指針一樣,改變一個數(shù)值之后,所有指向該數(shù)值的可變參量都會隨之而改變。就比如說改變a的值,會同步的去改變b的值。那么我們應(yīng)該對這種類型的賦值有所了解,才能夠避免在實際的編程中犯錯。

到此這篇關(guān)于Python3中的指針你了解嗎的文章就介紹到這了,更多相關(guān)Python3 指針內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python 類與元類的深度挖掘 I【經(jīng)驗】

    Python 類與元類的深度挖掘 I【經(jīng)驗】

    super() 方法解決了類->實例實踐過程中關(guān)于命名空間的一些問題,而關(guān)于生成對象的流程,我們知道初始化實例是通過類的 __init__() 方法完成的,在此之前可能涉及到一些其它的準(zhǔn)備工作,包括接下來提到的 mro() 方法以及關(guān)鍵的元類->類的過程
    2016-05-05
  • python3 中的字符串(單引號、雙引號、三引號)以及字符串與數(shù)字的運算

    python3 中的字符串(單引號、雙引號、三引號)以及字符串與數(shù)字的運算

    這篇文章主要介紹了python3 中的字符串(單引號、雙引號、三引號)以及字符串與數(shù)字的運算,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • 1秒鐘使用python建立文件服務(wù)器的方法步驟

    1秒鐘使用python建立文件服務(wù)器的方法步驟

    本文主要介紹了1秒鐘使用python建立文件服務(wù)器的方法步驟,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-10-10
  • Python 十大特性

    Python 十大特性

    這篇文章主要給大家分享的是Python十大特性,Python 編程語言是世界上發(fā)展最快的編程語言。這一高級通用編程語言提供了廣泛的實際應(yīng)用,并且是一種非常流行的認證,下面我們就來看看它都有哪些特性吧
    2022-01-01
  • python實現(xiàn)簡單爬蟲功能的示例

    python實現(xiàn)簡單爬蟲功能的示例

    本文主要是介紹python實現(xiàn)簡單爬蟲功能的示例,主要實現(xiàn)了把我們想要的圖片爬蟲到本地的一個示例,有需要的朋友可以了解一下。
    2016-10-10
  • tensorflow實現(xiàn)邏輯回歸模型

    tensorflow實現(xiàn)邏輯回歸模型

    這篇文章主要為大家詳細介紹了tensorflow實現(xiàn)邏輯回歸模型的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-09-09
  • Python KMeans聚類問題分析

    Python KMeans聚類問題分析

    這篇文章主要為大家詳細介紹了Python KMeans聚類問題,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-02-02
  • 解決python

    解決python "No module named pip"的問題

    今天小編就為大家分享一篇解決python "No module named pip"的問題。具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-10-10
  • Python計算當(dāng)前日期是一年中的第幾天的方法詳解

    Python計算當(dāng)前日期是一年中的第幾天的方法詳解

    在Python中,計算當(dāng)前日期是一年中的第幾天可以通過內(nèi)置的datetime模塊來實現(xiàn),本文將詳細介紹如何使用Python編寫代碼來完成這個任務(wù),需要的可以參考下
    2023-12-12
  • python調(diào)用xlsxwriter創(chuàng)建xlsx的方法

    python調(diào)用xlsxwriter創(chuàng)建xlsx的方法

    今天小編就為大家分享一篇python調(diào)用xlsxwriter創(chuàng)建xlsx的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-05-05

最新評論

九龙县| 友谊县| 万年县| 育儿| 饶河县| 葵青区| 平顶山市| 台安县| 革吉县| 永州市| 高平市| 大悟县| 获嘉县| 磴口县| 岑溪市| 两当县| 泰顺县| 独山县| 淮北市| 忻州市| 武义县| 舟山市| 四子王旗| 淮阳县| 广河县| 大足县| 冕宁县| 同德县| 南宁市| 黄山市| 龙川县| 诸城市| 衡阳市| 紫云| 五河县| SHOW| 宜丰县| 鹰潭市| 资兴市| 拜城县| 九龙坡区|