Python DeepCopyの例
DeepCopyは、オブジェクトとすべてのサブオブジェクトを再帰的にコピーして、完全に独立したコピーを作成します。 1.直接割り当てのみのコピー参照のみ、および元のオブジェクトの変更がコピーに影響します。 2。浅いコピーのみの外側のオブジェクトのみをコピーし、サブオブジェクトはまだ共有されており、ネストされた構造は同期して変化します。 3.ディープコピーはcopy.deepcopy()を介して実装され、コピーを変更しても元のデータには影響せず、ネストされたリスト、辞書、またはカスタムクラスインスタンスに適しています。使用法のシナリオには、データ前処理、状態ロールバック、マルチスレッドデータ配信などが含まれます。人クラスインスタンスなどのカスタムオブジェクトにDeepCopyを使用すると、属性が個別に変更され、DeepCopyが円形の参照を処理できることを確認できますが、パフォーマンスは遅く、ファイルハンドルなどの特別なオブジェクトをコピーすることは不可能であるため、潜在的なエラーに注意する必要があります。
Pythonでオブジェクト(リスト、辞書、カスタムクラスインスタンスなど)を処理すると、データを「コピー」する必要があるシナリオに遭遇することがよくあります。単に値を単に割り当てるだけの場合、実際のデータではなく、実際に参照をコピーするだけです。現時点では、 copy.deepcopy()
必要です。

以下は、それと通常のコピーの違いを理解するのに役立つ明確なdeepcopy
例です。
deepcopy
とは何ですか?
deepcopy
、オブジェクトとそれに含まれるすべての子供オブジェクトを再帰的にコピーし、完全に個別の新しいオブジェクトを作成します。新しいオブジェクトを変更しても、元のオブジェクトには影響しません。

例: deepcopy
vs assignment vs copy.copy()
コピーをインポートします #オリジナルネストリストオリジナル= [[1、2]、[3、4]] #メソッド1:直接割り当て(参照のみ) 割り当て=オリジナル #メソッド2:浅いコピー(外側のレイヤーのみをコピー) shallow = copy.copy(original) #メソッド3:ディープコピー(完全なコピー) deep = copy.deepcopy(オリジナル) #元のオブジェクトの最初のサブリストを変更するOriginal [0] .Append(3) print( "original:"、original)#[[1、2、3]、[3、4]] print( "assigned:"、assigned)#[[1、2、3]、[3、4]]←変更(同じ引用)に従ってください print( "shallow:"、shallow)#[[1、2、3]、[3、4]]←も変更されました!子オブジェクトが共有プリント( "deep:"、deep)#[[1、2]、[3、4]]←完全に独立していないので、変更されていません
deepcopy
を使用するのはいつですか?
- データはネストされた構造です(リストセット、辞書セットなど)
- 元のデータの偶発的な変更を避けるために、完全に独立したコピーが必要です
- たとえば、データの前処理、ロールバックステータス、マルチスレッド/インタープロセスデータ送信など。
カスタムオブジェクトにはdeepcopy
を使用します
コピーをインポートします クラスの人: def __init __(自己、名前、趣味): self.name = name self.hobbies =趣味#それがリストであると仮定しますalice = person( "alice"、["reading"、 "coding"]) ボブ= copy.deepcopy(アリス) #ボブの趣味を変更するbob.hobbies.append( "gaming") print(alice.hobbies)#['reading'、 'coding']←影響を受けていない印刷(bob.hobbies)#['reading'、 'coding'、 'gaming']
注意すべきこと
-
deepcopy
すべてのレベルを再帰的にコピーするため、copy.copy()
よりも遅いです - オブジェクトにコピーできないコンテンツ(ファイルハンドル、スレッドロックなど)が含まれている場合、エラーが発生するか、カスタム
__deepcopy__
が必要です。 - ループで参照されるオブジェクトも処理することができ、
deepcopy
無限の再帰を避けるメカニズムがあります
基本的にそれだけです。 deepcopy
複雑ではありませんが、ネストされたデータを処理する場合は非常に重要です。 「元のデータを不可解に変更した」という多くのバグを回避するのに役立ちます。
以上がPython DeepCopyの例の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undress AI Tool
脱衣画像を無料で

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

Pyodbcのインストール:Pipinstallpyodbcコマンドを使用してライブラリをインストールします。 2.接続sqlserver:pyodbc.connect()メソッドを介して、ドライバー、サーバー、データベース、uid/pwdまたはtrusted_connectionを含む接続文字列を使用し、それぞれSQL認証またはWindows認証をサポートします。 3.インストールされているドライバーを確認します:pyodbc.drivers()を実行し、「sqlserver」を含むドライバー名をフィルタリングして、「sqlserverのodbcdriver17」などの正しいドライバー名が使用されるようにします。 4.接続文字列の重要なパラメーター

Pythoncanbeoptimizedformemory-boundoperationsは、ヘッドゲネレーター、EfficientDataStructures、およびManagingObjectlifetimes.first、Usegeneratoratoratoratoratoratoraturatussを使用していることを確認してください

shutil.rmtree()は、ディレクトリツリー全体を再帰的に削除するPythonの関数です。指定されたフォルダーとすべてのコンテンツを削除できます。 1.基本的な使用法:shutil.rmtree(PATH)を使用してディレクトリを削除すると、FilenotFounderror、PermissionError、その他の例外を処理する必要があります。 2。実用的なアプリケーション:一時的なデータやキャッシュディレクトリなど、サブディレクトリとファイルを1回クリックして含むフォルダーをクリアできます。 3。注:削除操作は復元されません。 FilenotFounderrorは、パスが存在しない場合に投げられます。許可またはファイル職業のために失敗する可能性があります。 4.オプションのパラメーター:INGRORE_ERRORS = trueでエラーを無視できます

psycopg2.pool.simpleconnectionPoolを使用して、データベース接続を効果的に管理し、頻繁な接続の作成と破壊によって引き起こされるパフォーマンスオーバーヘッドを回避します。 1.接続プールを作成するときは、接続プールが正常に初期化されていることを確認するために、接続パラメーターとデータベース接続パラメーターの最小数と最大数を指定します。 2。getConn()を介して接続を取得し、putconn()を使用して、データベース操作を実行した後に接続をプールに戻します。絶えずconn.close()を呼び出すことは禁止されています。 3. SimpleConnectionPoolはスレッドセーフであり、マルチスレッド環境に適しています。 4.コンテキストマネージャーと組み合わせてコンテキストマネージャーを実装して、例外が記載されているときに接続を正しく返すことができることを確認することをお勧めします。

iter()は、Iteratorオブジェクトを取得するために使用され、次の要素を取得するために次()が使用されます。 1。Iterator()を使用して、リストなどの反復性オブジェクトを反復器に変換します。 2。NEXT()を呼び出して要素を1つずつ取得し、要素が使い果たされたときに停止の例外をトリガーします。 3.次の(iterator、デフォルト)を使用して、例外を回避します。 4。カスタムイテレーターは、反復ロジックを制御するために__iter __()および__next __()メソッドを実装する必要があります。デフォルト値を使用することは、安全なトラバーサルの一般的な方法であり、メカニズム全体が簡潔で実用的です。

統計アービトラージの紹介統計的arbitrageは、数学モデルに基づいて金融市場で価格の不一致を捉える取引方法です。その核となる哲学は、平均回帰に由来する、つまり、資産価格は短期的には長期的な傾向から逸脱する可能性がありますが、最終的には歴史的平均に戻ります。トレーダーは統計的方法を使用して、資産間の相関を分析し、通常は同期して変更されるポートフォリオを探す。これらの資産の価格関係が異常に逸脱すると、裁定取引の機会が生じます。暗号通貨市場では、主に市場自体の非効率性と劇的な変動のために、統計的な裁定が特に一般的です。従来の金融市場とは異なり、暗号通貨は24時間体制で動作し、その価格はニュース速報、ソーシャルメディアの感情、テクノロジーのアップグレードに非常に敏感です。この一定の価格の変動は、頻繁に価格設定バイアスを作成し、仲裁人を提供します

対応するデータベースドライバーをインストールします。 2。CONNECT()を使用してデータベースに接続します。 3.カーソルオブジェクトを作成します。 4。Execute()またはexecuteMany()を使用してSQLを実行し、パラメーター化されたクエリを使用して噴射を防ぎます。 5。Fetchall()などを使用して結果を得る。 6。COMMING()は、変更後に必要です。 7.最後に、接続を閉じるか、コンテキストマネージャーを使用して自動的に処理します。完全なプロセスにより、SQL操作が安全で効率的であることが保証されます。

Python仮想環境を作成するには、VENVモジュールを使用できます。手順は次のとおりです。1。プロジェクトディレクトリを入力して、python-mvenvenv環境を実行して環境を作成します。 2。SourceENV/bin/Activate to Mac/LinuxおよびEnv \ Scripts \ Windowsにアクティブ化します。 3. PIPINSTALLインストールパッケージ、PIPFREEZE> RECUMESSION.TXTを使用して、依存関係をエクスポートします。 4.仮想環境をGITに提出しないように注意し、設置中に正しい環境にあることを確認してください。仮想環境は、特にマルチプロジェクト開発に適した競合を防ぐためにプロジェクト依存関係を分離でき、PycharmやVSCodeなどの編集者も
