日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

go和python切片的不同

發布時間:2023/12/9 python 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 go和python切片的不同 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

2019獨角獸企業重金招聘Python工程師標準>>>

go有切片slice類型,python有列表和元組,這兩種語言都有切片操作。

但是它們的切片操作是完全不同的。

首先說第一個,go的切片,其成員是相同類型的,python的列表和元組則不限制類型。

兩種語言都有[a:b]這種切片操作,意義也類似,但是go的a、b兩個參數不能是負數,python可以是負數,此時就相當于從末尾往前數。

兩種語言都有[a:b:c]這種切片操作,意義卻是完全不同的。go的c,表示的是容量;而python的c表示的是步長。

但是最大的不同,還是:

python的切片產生的是新的對象,對新對象的成員的操作不影響舊對象;go的切片產生的是舊對象一部分的引用,對其成員的操作會影響舊對象。

究其原因,還是底層實現的不同。

go的切片,底層是一個三元組,一個指針,一個長度,一個容量。指針指向一塊連續的內存,長度是已有成員數,容量是最大成員數。切片時,一般并不會申請新的內存,而是對原指針進行移動,然后和新的長度、容量組成一個切片類型值返回。也就是說,go的切片操作通常會和生成該切片的切片共用內存。

不僅是切片,字符串、數組的切片也是一樣的,通常會共用內存。

當然也有異常情況,那就是切片時,提供的容量過大,此時會申請新內存并拷貝;或者對切片append超出容量,也會如此。這時,新的切片,才不會和老切片共享內存。(如果你切片/創建時提供的容量小于長度,會panic)

python的列表,其實是個指針數組。當然在下層也會提供一些空位之類的,但基本就是個數組。對它們切片,會創建新的數組,注意,是創建新的數組!python的列表可沒有容量的概念。

這其實也體現了腳本語言和編譯語言的不同。雖然兩個語言都有類似的切片操作;但是python主要目標是方便;go主要目標卻是快速(并彌補丟棄指針運算的缺陷)。


轉載于:https://my.oschina.net/liudiwu/blog/311830

總結

以上是生活随笔為你收集整理的go和python切片的不同的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。