は、例えばmyfoo0()
Pythonのリスト展開は、これは高価ですか?それは非効率的ですか?
def myfoo0():
return([1, 2, 3])
、これは以下のように使用されていることを、私は複数の要素を返すPythonの機能を持っていると仮定します。fit
のエントリのいくつかを使用する機能を検討し、
fit = myfoo0();
入力として。
def myfoo1(fit):
[a, b, c] = fit
return(doSomething(a))
は今、私はそれが簡単に私はこのように書いた場合つもりで読むことを見つける:たとえば、私は多くの機能myfoo1
、...、myfoon
それぞれを持っている場合
fit = myfoo0();
out = myfoo1(fit)
(例はあります)
fit
の異なるコンポーネントを使用して 私の質問は
myfoo1
の体内
fit
のエントリの命名と上記のコードは、()は、この1に()パフォーマンスの観点から比較しない方法です:
特に
def myfoo2(a):
return(doSomething(a))
は、関数内開梱タプルを有する溶液が(コピーの点で例えば)かなりの追加コストを招くある
[a, b, c] = myfoo0();
out = myfoo2(a)
?
どこにでも深いコピーを作成しているわけではありません。ここのコピーはすべて浅いです。しかし、この場合、リスト(または他のオブジェクト)のネストが2レベル以上あることは決してありません。この場合、深い部分と浅い部分が等価です。深いコピーの例は、リストのリストがあり、両方のレベルのすべてのリストがコピーされている場合です。浅いコピーは、ネストされたリストが共有されている最上位のリストのみをコピーします。 –
これはまったく同じです。 – BadZen
[OK]を、私は彼らがこの文脈で意味したことを誤解した深いコピーに言及を削除しました。私の質問は、最初のコンストラクトが何とか非効率的であることです - 私は(IMHO)の明快さのためにコストを負担しましたか? – user189035