Python の面接でよくある質問: 浅いコピーと深いコピー
Python の面接では、シャロー コピーとディープ コピーは比較的難しい質問です。60 パーセントの人はシャロー コピーとディープ コピーについて聞いたことがなく、30 パーセントの人は基本的なことしか理解していませんコンセプトとシンプルさの違い。 2 つの違いを正確に見分けて、関連するコード デモの作成を完了できる大人は 1 人未満です。今日はこの悩みを解決して、面接に昇進の重みを加えていきましょう!この記事は、シャロー コピーとディープ コピーについて説明したインターネット上で最もわかりやすい記事と思われます。記事の例に従って実践していただければ、シャロー コピーとディープ コピーの技術的な難しさは必ず理解できるでしょう。コピーは!
変数の割り当て
Python 変数データ型 (リスト、ディクショナリ、セット) では、変数データ型の変数を別の変数に割り当てます。2 つの変数は、同じオブジェクトには同じものがあります。メモリ アドレス。1 つの変数が変更されると、それに応じて他の変数も変更されます。 Python の可変データ型と不変データ型の技術的な詳細について知りたい場合は、次の記事を参照してください: Python インタビューでよくある質問: 可変データ型と不変データ型の違い。
前回の記事から例を見てみましょう。
l1=['a','b','c'] l2=l1 print(id(l1)) print(id(l2)) l2.append('d') print("************") print(id(l1)) print(l1) print(id(l2)) print(l2) 输出: 838366483528 838366483528 ************ 838366483528 ['a', 'b', 'c', 'd'] 838366483528 ['a', 'b', 'c', 'd']
出力結果についてはここでは説明しませんが、l1とl2のアドレスは同じなので相互に影響します。
浅いコピー
オブジェクトの最上位をコピーし、オブジェクトの「参照」のみをコピーします。
前の記事の例を見てみましょう。リストにはレイヤーが 1 つだけあります。つまり、要素には他のリストが含まれません。
l3=['x','y','z'] l4=list(l3) print(id(l3)) print(id(l4)) l4.append('a') print(l3) print(l4) 输出 831456302152 831480344136 ['x', 'y', 'z'] ['x', 'y', 'z', 'a']
結果からわかるように、l3 と l4 のアドレスは異なるため、相互に影響しません。
別の例を取り上げて、l3 の最初の要素をリストにしてみましょう。
l3=[['x','y','z'],'a','b'] l4=list(l3) print(id(l3)) print(id(l4)) l4.append('c') print(l3) print(l4) 结果 533336249416 533337391240 [['x', 'y', 'z'], 'a', 'b'] [['x', 'y', 'z'], 'a', 'b', 'c']
結果は予想どおりです。最初の要素はリストなのでアドレスもあり、それを出力します。
print(id(l3[0])) print(id(l4[0])) 结果 533336248904 533336248904
l3[0] と l4[0] のアドレスが実際には同じであることがわかり、次のコードを実行します。
l3[0].append('yy') print(l3) print(l4) 结果 [['x', 'y', 'z', 'yy'], 'a', 'b'] [['x', 'y', 'z', 'yy'], 'a', 'b', 'c']
結果は期待どおりであり、l3[0] の値を変更すると l4[0] にも影響します。では、l3[0] と l4[0] が相互に影響を与えないようにするにはどうすればよいでしょうか? これには、ディープ コピーの導入が必要です。
ディープ コピー
ディープ コピーでは、オブジェクト内の各レイヤーがコピーされます。コピーされたオブジェクトは、元のオブジェクトから完全に独立しており、関係はありません。ディープ コピーを実装するには、コピー モジュールで deepcopy メソッドを使用する必要があります。
import copy l3=[['x','y','z'],'a','b'] #l4=list(l3) #浅拷贝,使用=copy.copy(l3)也可以实现浅拷贝 l4=copy.deepcopy(l3) #深拷贝 l4.append('c') print(id(l3[0])) print(id(l4[0])) l3[0].append('yy') print(l3) print(l4) 输出 407168435784 407166887304 [['x', 'y', 'z', 'yy'], 'a', 'b'] [['x', 'y', 'z'], 'a', 'b', 'c']
l3[0] と l4[0] は完全に独立しており、互いに影響を与えていないことがわかります。
シャロー コピーとディープ コピーの概要
多くを語る必要はありません。2 枚の図を使って簡単に説明します。
シャロー コピーは次のとおりです。
以下に示すディープ コピー:
以上がPython の面接でよくある質問: 浅いコピーと深いコピーの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

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

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

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

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

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

ホットトピック









MySQLには、無料のコミュニティバージョンと有料エンタープライズバージョンがあります。コミュニティバージョンは無料で使用および変更できますが、サポートは制限されており、安定性要件が低く、技術的な能力が強いアプリケーションに適しています。 Enterprise Editionは、安定した信頼性の高い高性能データベースを必要とするアプリケーションに対する包括的な商業サポートを提供し、サポートの支払いを喜んでいます。バージョンを選択する際に考慮される要因には、アプリケーションの重要性、予算編成、技術スキルが含まれます。完璧なオプションはなく、最も適切なオプションのみであり、特定の状況に応じて慎重に選択する必要があります。

この記事では、MySQLデータベースの操作を紹介します。まず、MySQLWorkBenchやコマンドラインクライアントなど、MySQLクライアントをインストールする必要があります。 1. mysql-uroot-pコマンドを使用してサーバーに接続し、ルートアカウントパスワードでログインします。 2。CreatedAtaBaseを使用してデータベースを作成し、データベースを選択します。 3. createTableを使用してテーブルを作成し、フィールドとデータ型を定義します。 4. INSERTINTOを使用してデータを挿入し、データをクエリし、更新することでデータを更新し、削除してデータを削除します。これらの手順を習得することによってのみ、一般的な問題に対処することを学び、データベースのパフォーマンスを最適化することでMySQLを効率的に使用できます。

MySQLデータベースパフォーマンス最適化ガイドリソース集約型アプリケーションでは、MySQLデータベースが重要な役割を果たし、大規模なトランザクションの管理を担当しています。ただし、アプリケーションのスケールが拡大すると、データベースパフォーマンスのボトルネックが制約になることがよくあります。この記事では、一連の効果的なMySQLパフォーマンス最適化戦略を検討して、アプリケーションが高負荷の下で効率的で応答性の高いままであることを保証します。実際のケースを組み合わせて、インデックス作成、クエリ最適化、データベース設計、キャッシュなどの詳細な主要なテクノロジーを説明します。 1.データベースアーキテクチャの設計と最適化されたデータベースアーキテクチャは、MySQLパフォーマンスの最適化の基礎です。いくつかのコア原則は次のとおりです。適切なデータ型を選択し、ニーズを満たす最小のデータ型を選択すると、ストレージスペースを節約するだけでなく、データ処理速度を向上させることもできます。

hadidb:軽量で高レベルのスケーラブルなPythonデータベースHadIDB(HadIDB)は、Pythonで記述された軽量データベースで、スケーラビリティが高くなっています。 PIPインストールを使用してHADIDBをインストールする:PIPINSTALLHADIDBユーザー管理CREATEユーザー:CREATEUSER()メソッド新しいユーザーを作成します。 Authentication()メソッドは、ユーザーのIDを認証します。 fromhadidb.operationimportuseruser_obj = user( "admin"、 "admin")user_obj。

MySQLは、基本的なデータストレージと管理のためにネットワーク接続なしで実行できます。ただし、他のシステムとのやり取り、リモートアクセス、または複製やクラスタリングなどの高度な機能を使用するには、ネットワーク接続が必要です。さらに、セキュリティ対策(ファイアウォールなど)、パフォーマンスの最適化(適切なネットワーク接続を選択)、およびデータバックアップは、インターネットに接続するために重要です。

Hash値として保存されているため、Navicatを介してMongoDBパスワードを直接表示することは不可能です。紛失したパスワードを取得する方法:1。パスワードのリセット。 2。構成ファイルを確認します(ハッシュ値が含まれる場合があります)。 3.コードを確認します(パスワードをハードコードできます)。

MySQLワークベンチは、構成が正しい場合、MariadBに接続できます。最初にコネクタタイプとして「mariadb」を選択します。接続構成では、ホスト、ポート、ユーザー、パスワード、およびデータベースを正しく設定します。接続をテストするときは、ユーザー名とパスワードが正しいかどうか、ポート番号が正しいかどうか、ファイアウォールが接続を許可するかどうか、データベースが存在するかどうか、MariadBサービスが開始されていることを確認してください。高度な使用法では、接続プーリングテクノロジーを使用してパフォーマンスを最適化します。一般的なエラーには、不十分な権限、ネットワーク接続の問題などが含まれます。エラーをデバッグするときは、エラー情報を慎重に分析し、デバッグツールを使用します。ネットワーク構成を最適化すると、パフォーマンスが向上する可能性があります

生産環境の場合、パフォーマンス、信頼性、セキュリティ、スケーラビリティなどの理由により、通常、MySQLを実行するためにサーバーが必要です。サーバーには通常、より強力なハードウェア、冗長構成、より厳しいセキュリティ対策があります。小規模で低負荷のアプリケーションの場合、MySQLはローカルマシンで実行できますが、リソースの消費、セキュリティリスク、メンテナンスコストを慎重に考慮する必要があります。信頼性とセキュリティを高めるには、MySQLをクラウドまたは他のサーバーに展開する必要があります。適切なサーバー構成を選択するには、アプリケーションの負荷とデータボリュームに基づいて評価が必要です。
