Pythonのリストとメタグループのストレージ方式と性能の違い、使用するシーン
22812 ワード
Pythonのリストとメタグループの使用
一、リストとメタグループの基礎:
リストとメタグループは、任意のデータ型を配置できる秩序化された集合です.
多くの言語では、集合のデータ型が一致する必要があります.ただし、Pythonのリストとメタグループについては、この要件はありません.
では、それらの間にはどんな違いがありますか?
リストはダイナミックです.長さのサイズが固定されず、要素を任意に追加、削除、または変更できます.
メタグループは静的です.長さは固定されており、削除や変更を増やすことはできません.
次に栗を挙げます.は、それぞれリストとメタグループを作成します.リストに最後の要素を簡単に追加できますが、同じ操作のメタグループはエラーを報告します.
Pythonのリストとメタグループは、負のインデックスをサポートしています.
-1は最後の要素を表し、-2は最後から2番目の要素を表します.
Pythonリストとメタグループはスライス操作をサポートしています.
インデックスは1から2までで、簡単に理解できます:“前閉じてから開きます”
Pythonはlist()とtuple()関数で相互変換できます.
Pythonリストとメタグループの一般的な組み込み関数: count(item):統計リスト/メタグループにitemが表示された回数を示します. index(item):リスト/メタグループにitemが初めて現れるインデックスを返します. list.reverse()とlist.sort()は,それぞれその場逆転リストと並べ替えを表す.
注意、メタグループにはこの2つの関数が内蔵されていません.メタグループをリストに変換してこの関数の操作を行う必要があります.
reversed()とsorted()は、リスト/メタグループを逆転およびソートすることを示しますが、逆転後または順序付けされた
二、リストとメタグループの保存方式の違い:
同じ要素が配置されているのに、メタグループが格納する空間はリストよりリストは動的であるため、対応する要素(int型、8バイト)を指すために リストは可変なので、 リスト空間割付手順は、以下に説明する:
このようなメカニズムは、その操作の効率性を保証する:時間の複雑さを増加/削除する0(1);
は、タプルにとって
三、リストとメタグループの性能:
上記の両者間の記憶方式の違いから,
Pythonのバックグラウンドでは、静的データをいくつかのリソースキャッシュします.ごみ回収メカニズムが存在するため、一部の変数が使用されない場合、Pythonは使用したメモリを回収し、他の変数や他のアプリケーションで使用できるようにオペレーティングシステムに返却します.
メタグループなどの静的変数では、使用されず、スペースが少ない場合、Pythonはメモリの一部を一時的にキャッシュします.次に同じサイズのメタグループを作成すると、Pythonはオペレーティングシステムに要求することなく、メモリを直接探すことができ、前にキャッシュしたメモリスペースを直接割り当てることができ、プログラムの実行速度を大幅に速めることができます.
四、リストとメタグループの使用シーン:格納されている は、
五、まとめ:
リストとメタグループは順序付けされており、任意のデータ型の集合を格納できます.主な違いは次のとおりです.リストはダイナミックで、長さは可変で、要素を任意に追加、削除、または変更することができます.
リストの記憶領域はメタグループよりやや大きく、性能はメタグループよりやや劣っている.
メタグループは静的で、長さは固定されており、要素を増加、削除、または変更することはできません.
メタグループはリストより軽量級で、性能がやや優れている.
六、list()、効率と何か違いがありますか?
違いは次のとおりです. list()は []は
一、リストとメタグループの基礎:
リストとメタグループは、任意のデータ型を配置できる秩序化された集合です.
多くの言語では、集合のデータ型が一致する必要があります.ただし、Pythonのリストとメタグループについては、この要件はありません.
my_list = [66, 77, 'fe', 'cow'] # int string
print(my_list)
# : [66, 77, 'fe', 'cow']
my_tuple = ('fe_cow', 666) # int string
print(my_tuple)
# ('fe_cow', 666)
では、それらの間にはどんな違いがありますか?
リストはダイナミックです.長さのサイズが固定されず、要素を任意に追加、削除、または変更できます.
メタグループは静的です.長さは固定されており、削除や変更を増やすことはできません.
次に栗を挙げます.
my_list = [1, 2, 3, 4]
my_list[3] = 5 # python 0 my_list[3]
print(my_list)
# : [1, 2, 3, 5]
my_tuple = (1, 2, 3, 4)
my_tuple[3] = 5
print(my_tuple)
# :
Traceback (most recent call last):
File "" , line 1, in <module>
TypeError: 'tuple' object does not support item assignment
既存のメタグループを「変更」したい場合は、 ,
です.my_tuple= (1, 2, 3)
new_tuple = my_tuple + (4, )
print(new_tuple)
# : (1, 2, 3, 4)
Pythonのリストとメタグループは、負のインデックスをサポートしています.
//
my_list = [1, 2, 3, 4]
my_list[-1]
4
//
my_tuple = (1, 2, 3, 4)
my_tuple[-2]
3
-1は最後の要素を表し、-2は最後から2番目の要素を表します.
Pythonリストとメタグループはスライス操作をサポートしています.
//
my_list = [1, 2, 3, 4]
my_list[1:3]
[2, 3]
//
my_tuple = (1, 2 ,3 ,4)
my_tuple[1:3]
(2, 3)
インデックスは1から2までで、簡単に理解できます:“前閉じてから開きます”
Pythonはlist()とtuple()関数で相互変換できます.
//
list((1, 2, 3))
[1, 2, 3]
//
tuple([1, 2, 3])
(1, 2, 3)
Pythonリストとメタグループの一般的な組み込み関数:
//
my_list = [3, 2, 3, 7, 8, 1]
my_list.count(3)
2
my_list.index(7)
3
my_list.reverse()
my_list
[1, 8, 7, 3, 2, 3]
my_list.sort()
my_list
[1, 2, 3, 3, 7, 8]
//
my_tuple = (3, 2, 3, 7, 8, 1)
my_tuple.count(3)
2
my_tuple.index(7)
3
list(reversed(my_tuple))
[1, 8, 7, 3, 2, 3]
sorted(my_tuple)
[1, 2, 3, 3, 7, 8]
注意、メタグループにはこの2つの関数が内蔵されていません.メタグループをリストに変換してこの関数の操作を行う必要があります.
reversed()とsorted()は、リスト/メタグループを逆転およびソートすることを示しますが、逆転後または順序付けされた
/
が返されます.二、リストとメタグループの保存方式の違い:
// __sizeof__()
my_list = [1,2 ,3 ,4]
my_list.__sizeof__()
72
my_tuple = (1, 2, 3, 4)
my_tuple.__sizeof__()
56
同じ要素が配置されているのに、メタグループが格納する空間はリストより
16
であることがわかります.どうしてですか.理由は次のとおりです.
が必要である. ,
でリスト空間の使用状況をリアルタイムで追跡できるように、割り当てられた長さサイズ(8バイト)を追加で格納する必要があります.my_list = []
my_list.__sizeof__() // 40
40
my_list.append(1)
my_list.__sizeof__()
72 // 1 , 4 (72 - 40)/8 = 4
# 4
my_list.append(2)
my_list.__sizeof__()
72 // , 2,
my_list.append(3)
my_list.__sizeof__()
72 // 3,
my_list.append(4)
my_list.__sizeof__()
72 // 4,
my_list.append(5)
my_list.__sizeof__()
104 // 5 , , 4
リストの追加/削除操作のたびにスペース割り当てのオーバーヘッドを減らすために、Pythonはスペースを割り当てるたびに、追加的に割り当てます.このようなメカニズムは、その操作の効率性を保証する:時間の複雑さを増加/削除する0(1);
, ,
である.三、リストとメタグループの性能:
上記の両者間の記憶方式の違いから,
,
と結論した.Pythonのバックグラウンドでは、静的データをいくつかのリソースキャッシュします.ごみ回収メカニズムが存在するため、一部の変数が使用されない場合、Pythonは使用したメモリを回収し、他の変数や他のアプリケーションで使用できるようにオペレーティングシステムに返却します.
メタグループなどの静的変数では、使用されず、スペースが少ない場合、Pythonはメモリの一部を一時的にキャッシュします.次に同じサイズのメタグループを作成すると、Pythonはオペレーティングシステムに要求することなく、メモリを直接探すことができ、前にキャッシュしたメモリスペースを直接割り当てることができ、プログラムの実行速度を大幅に速めることができます.
四、リストとメタグループの使用シーン:
が、データをフロントエンドレンダリングに直接伝える必要がある場合は、メタグループを選択するのが適切であることは間違いありません.//
def get_location():
.....
return (longitude, latitude)
が格納されている場合、リストを使用するのがより適切である.//
teacher_list = [] //
result = DB(teacherID) // , QuerySet
for item in result:
teacher_list.append(item)
五、まとめ:
リストとメタグループは順序付けされており、任意のデータ型の集合を格納できます.主な違いは次のとおりです.
リストの記憶領域はメタグループよりやや大きく、性能はメタグループよりやや劣っている.
メタグループはリストより軽量級で、性能がやや優れている.
六、list()、効率と何か違いがありますか?
違いは次のとおりです.
であり、Python関数呼び出しは
を作成し、一連のパラメータチェックの操作を行う. C
であり、直接呼び出すことができるため、効率が高い.