ホームページ バックエンド開発 Python チュートリアル Lao Qi から Python を学び、変数と参照オブジェクトについて詳しく学びます

Lao Qi から Python を学び、変数と参照オブジェクトについて詳しく学びます

Jun 16, 2016 am 08:41 AM
変数

「永遠に強力な関数」の講義で、読者に変数について簡単に紹介してきました。それ以来、変数を使用するたびに、代入という操作が必要になります。この講義では、変数と代入とその理由を読者に明確に理解してもらうために、これら 2 つのことに再度言及します。もちろん、最終的にこの目標を達成できるかどうかは、分かりやすさに大きく依存します。理解できない場合は、私の言ったことは十分ではないということですので、私に連絡してください。またお手伝いします。

変数とオブジェクト

著者は「Python を学ぶ」という本で、変数、オブジェクト、参照の関係を非常にわかりやすく説明しています。私はここで彼からとてもインスピレーションを受けています。著者のマーク・ラッツ氏の傑作に感謝します。

「Python の学習」に視点を適用する: 変数には型はありませんが、オブジェクトには型があります

Python では、変数を使用する場合、事前に宣言する必要はなく、使用するときに変数に値を代入するだけです。ここで特に強調したいのは、変数が使用されている限り、その変数に値を割り当てる必要があるということです。

つまり、このままではうまくいきません。

コードをコピー コードは次のとおりです:

>>>x
トレースバック (最後の呼び出し):
ファイル「」、1 行目、
NameError: 名前「x」が定義されていません

繰り返しの注意事項: エラー メッセージに必ず注意してください。値を代入せずに単に変数を記述すると、Python は変数が定義されていないとみなします。代入は null 以外の値だけでなく、null 値も許可されます。

コードをコピー コードは次のとおりです:

>>> x = 3
>>> lst = []
>>> 単語 = ""
>>> my_dict = {}

前の説明で、変数が線を介してオブジェクトに接続されている (具体的には int/list など) というアナロジーを提案しましたが、このアナロジーは多くの人に受け入れられました。私、ラオ・チーの最初の作品と考えられています。したがって、厳密な言語を使用して変数を記述したい場合、変数は、オブジェクトを指す名前空間を持つシステム テーブルの要素として理解できます。あまりにも深刻すぎて、私のたとえを理解するのは難しいです。変数とは、システム内に存在するもので、オブジェクトと線で結ばれ、魚を釣ることができます。

ターゲットはどこですか?想像力を働かせてください。マシンのメモリ内に、システムはいわゆるオブジェクトを含むスペースを割り当てます。場合によっては数値が配置され、場合によっては文字列が配置されます。数値を入力した場合は int 型、文字列を入力した場合は str 型になります。

次に、先ほど述べた変数が自身の能力を使ってオブジェクトを自身に接続します(ポインタがオブジェクト空間を接続します)。これが参照です。参照が完了すると、割り当てが実現されます。

上の図を参照してください。変数とオブジェクトの関係が明確に示されています。したがって、厳密に言えば、メモリ空間に配置されたオブジェクト (つまりデータ) のみが型を持ち、変数には型がありません。まだ完全に理解していない場合は、別の比喩を使用してみましょう。変数は漁師のようなもので、湖は記憶のようなものです。湖にはたくさんの魚がいて、あらゆる種類の魚が存在し、それらはオブジェクトです。漁師 (変数) の仕事は、何らかの方法 (ルアー) で釣り糸を通して自分と魚を結び付けることです。まあ、魚の種類もいて、銀鮒、フナ、太刀魚(太刀魚も湖に行ったんですけど、淡水の太刀魚ですか?ははは、くだらない話ばかりです、真剣に考えないでください)、そして漁師さん(変数)にはこのタイプはありません、彼はさまざまなタイプの魚を捕まえます。

この比喩はひどいです。とりあえず我慢して理解してください。良い比喩がある場合は、忘れずに共有してください。

同じ変数が同時に 2 つのオブジェクトを指すことはできますか? 2 つの異なるボートに乗ることはできません。そうなったらどうなるでしょうか?

コードをコピー コードは次のとおりです:

>>> x = 4
>>> x = 5
>>>x
5

変数 x は最初にオブジェクト 4 を指し、次にオブジェクト 5 を指します。後者が解放されると、自動的に最初のオブジェクト 4 に接続します。もう一度 x を見ると、参照されているオブジェクトは 5 です。 4はどうでしょうか?参照する変数がなくなると、ゴーストになります。 Python は非常にケチで、メモリ内にゴーストが存在することを絶対に許可しません。これらはすべてガベージとみなされ、Python にはガベージを自動的に回復するメカニズムが備わっています。

インターネットでグラフィックの説明を見つけました。非常に優れているので、ここに引用します (出典: http://www.linuxidc.com/Linux/2012-09/69523.htm)

コードをコピー コードは次のとおりです:

>>> a = 100 #メモリ空間内のオブジェクト 100 への変数 a の参照を完了します

以下に示すように:

そして、彼はまた同じことをしました:

コードをコピー コードは次のとおりです:

>>> a = "こんにちは"

以下に示すように:

メモリ内の元の 100 はゴミとして収集されました。なお、この収集処理はPythonが自動的に行ってくれるので、特に心配する必要はありません。

では、Python はどのようにしてガベージ コレクションを実行するのでしょうか? Quora でこの質問をした人もいます。その答えは非常に興味深いものだと思いますので、リンクして読んでみてください。 Python (プログラミング言語): Python のガベージ コレクションはどのように機能しますか?

と ==

の効果

上記のプロセスの原則が明確になったので、さらに一歩進めることができます。

コードをコピー コードは次のとおりです:

>>> l1 = [1,2,3]
>>> l2 = l1

この操作では、2 つの変数 l1 と l2 はオブジェクトを参照します (両方とも [1,2,3])。どうすれば見えますか? [1,2,3] が l1 によって変更され、l2 によって参照されるオブジェクトも変更される場合、このビューは確認されます。

コードをコピー コードは次のとおりです:

>>> l1[0] = 99 #オブジェクトを [99,2,3] に変更します
>>> l1 #変更されました
[99、2、3]
>>> l2
[99、2、3]

別の方法:

コードをコピー コードは次のとおりです:

>>> l1 = [1,2,3]
>>> l2 = [1,2,3]
>>> l1[0] = 99
>>> l1
[99、2、3]
>>> l2
[1、2、3]

l1 と l2 は同じオブジェクト [1,2,3] を指しているように見えますが、実際、メモリ内ではこれら 2 つは互いに無関係です。内容的には全く同じです。それは、水の中で成長している2匹の魚が、両方とも2人によって捕まえられ、同じ魚ではないふりをしているようなものです。したがって、l1 を通じて参照オブジェクトが変更されても、l2 は変更されません。

これはさらにテストできます:

コードをコピー コードは次のとおりです:

>>> l1
[1、2、3]
>>> l2
[1、2、3]
>>> l1 == l2 #2 が等しいということは、内容が同じであることを意味します
本当です
>>> l1 is l2 #is は、メモリ内の 2 つの参照オブジェクトのアドレスが同じかどうかを比較します
False #前のテストでは、これら 2 つのことが示されました

>>gt;>gt;>l3 = l1 #ちなみにこの場合、l3 と l1 は同じオブジェクトを適用します
>>> l3
[1、2、3]
>>> l3 == l1
本当です
>>> l3 は l1 #is結果は True
本当です

一部のオブジェクトにはコピー機能があります。この機能で取得したオブジェクトは新しいオブジェクトですか、それとも同じオブジェクトを参照していますか?上記と同様の実験を行ってみるとわかります。例:

コードをコピー コードは次のとおりです:

>>> l1
[1、2、3]
>>> l2 = l1[:]
>>> l2
[1、2、3]
>>> l1[0] = 22
>>> l1
[22、2、3]
>>> l2
[1、2、3]

>>> adict = {"name":"qiwsir","web":"qiwsir.github.io"}
>>> bdict = adict.copy()
>>> {'web': 'qiwsir.github.io', 'name': 'qiwsir'}
>>> adict["メール"] = "qiwsir@gmail.com"
>>> 中毒者
{'web': 'qiwsir.github.io', 'name': 'qiwsir', 'email': 'qiwsir@gmail.com'}
>>> {'web': 'qiwsir.github.io', 'name': 'qiwsir'}


ただし、Python は、小さい数字など、常に上記の方法でカードをプレイするわけではないことに注意してください。


コードをコピー

コードは次のとおりです:

>>> x = 2
>>> y = 2
>>> x は y
本当です
>>> x = 200000
>>> y = 200000
>>> 誤り
>>>x = 'こんにちは'

>>> = 'こんにちは'
>>> x は y
本当です
>>> x = 「あなたの名前は何ですか?」
>>> y = 「あなたの名前は何ですか?」
>>> x は y #小さい数字だけでなく短い文字列も可能です
誤り

代入は単なる等号ですか?上記のことから、= の機能は変数ポインタがオブジェクトを指すようにすることであると結論付けることができます。ただし、もう少し深く掘り下げることもできます。見てみましょう。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

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

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

Windows 11 および 10 の環境変数をプロファイリングに使用するためのガイド Windows 11 および 10 の環境変数をプロファイリングに使用するためのガイド Nov 01, 2023 pm 08:13 PM

環境変数は、アプリケーションやプログラムが実行される場所 (または環境) へのパスです。ユーザーはこれらを作成、編集、管理、削除でき、特定のプロセスの動作を管理する場合に便利です。ここでは、Windows で複数の変数を個別に編集することなく、複数の変数を同時に管理するための構成ファイルを作成する方法を説明します。環境変数でプロファイルを使用する方法 Windows 11 および 10 Windows には、ユーザー変数 (現在のユーザーに適用) とシステム変数 (グローバルに適用) の 2 つの環境変数セットがあります。ただし、PowerToys などのツールを使用すると、別の構成ファイルを作成して新しい変数と既存の変数を追加し、それらをすべて一度に管理できます。方法は次のとおりです: ステップ 1: PowerToysPowerTo をインストールする

PHP7 の変数の厳密モード: 潜在的なバグを減らすには? PHP7 の変数の厳密モード: 潜在的なバグを減らすには? Oct 19, 2023 am 10:01 AM

PHP7 では Strict モードが導入され、開発者が潜在的なエラーを減らすのに役立ちます。この記事では、厳密モードとは何か、および PHP7 で厳密モードを使用してエラーを減らす方法について説明します。同時に、コード例を通じて厳密モードの適用を示します。 1.ストリクトモードとは何ですか? Strict モードは、開発者がより標準化されたコードを作成し、いくつかの一般的なエラーを減らすのに役立つ PHP7 の機能です。厳密モードでは、変数宣言、型チェック、関数呼び出しなどに厳密な制限と検出が行われます。合格

Javaのインスタンス変数とは何ですか Javaのインスタンス変数とは何ですか Feb 19, 2024 pm 07:55 PM

Java のインスタンス変数は、メソッドやコンストラクターではなく、クラスで定義された変数を指します。インスタンス変数はメンバー変数とも呼ばれ、クラスの各インスタンスにはインスタンス変数の独自のコピーがあります。インスタンス変数はオブジェクトの作成時に初期化され、その状態はオブジェクトの存続期間全体にわたって保存および維持されます。インスタンス変数定義は通常、クラスの先頭に配置され、パブリック、プライベート、プロテクト、またはデフォルトのアクセス修飾子など、任意のアクセス修飾子を使用して宣言できます。それは私たちがこれをどうしたいかによって決まります

Ajaxを使用してPHPメソッドから変数を取得するにはどうすればよいですか? Ajaxを使用してPHPメソッドから変数を取得するにはどうすればよいですか? Mar 09, 2024 pm 05:36 PM

Ajax を使用して PHP メソッドから変数を取得することは、Web 開発では一般的なシナリオであり、Ajax を使用すると、データを更新せずにページを動的に取得できます。この記事では、Ajax を使用して PHP メソッドから変数を取得する方法と、具体的なコード例を紹介します。まず、Ajax リクエストを処理し、必要な変数を返すための PHP ファイルを作成する必要があります。以下は、単純な PHP ファイル getData.php のサンプル コードです。

内部エラー: 一時ディレクトリを作成できません [解決済み] 内部エラー: 一時ディレクトリを作成できません [解決済み] Apr 17, 2023 pm 03:04 PM

Windows システムでは、ユーザーは実行可能ファイル/セットアップ ファイルを使用してさまざまな種類のアプリケーションをシステムにインストールできます。最近、多くの Windows ユーザーが、実行可能ファイルを使用してアプリケーションをインストールしようとすると、システム上で INTERNALERROR:cannotCreateTemporaryDirectory というエラーが表示されると苦情を言い始めています。この問題はこれに限定されず、Windows システムにインストールされている既存のアプリケーションをユーザーが起動することもできなくなります。考えられる理由のいくつかを以下に示します。管理者権限を付与せずに実行可能ファイルを実行してインストールします。 TMP 変数に無効なパス、または異なるパスが指定されました。破損したシステム

PHP 関数の紹介 - is_string(): 変数が文字列かどうかを確認する PHP 関数の紹介 - is_string(): 変数が文字列かどうかを確認する Jul 24, 2023 pm 09:33 PM

PHP 関数の紹介 - strpos(): 変数が文字列であるかどうかを確認する PHP では、is_string() は変数が文字列であるかどうかを確認するために使用される非常に便利な関数です。変数が文字列であるかどうかを判断する必要がある場合、 is_string() 関数を使用すると、この目標を簡単に達成できます。以下では、is_string() 関数の使用方法を学び、関連するコード例をいくつか示します。 is_string() 関数の構文は非常に単純です。必要なのはそれだけです

Python 構文のマインド マップ: コード構造の深い理解 Python 構文のマインド マップ: コード構造の深い理解 Feb 21, 2024 am 09:00 AM

Pythonはそのシンプルで読みやすい構文から幅広い分野で広く使われています。プログラミングの効率を向上させ、コードがどのように機能するかを深く理解するためには、Python 構文の基本構造をマスターすることが重要です。この目的を達成するために、この記事では、Python 構文のさまざまな側面を詳しく説明した包括的なマインド マップを提供します。変数とデータ型 変数は、Python でデータを保存するために使用されるコンテナです。マインド マップには、整数、浮動小数点数、文字列、ブール値、リストなどの一般的な Python データ型が表示されます。各データ型には独自の特性と操作方法があります。演算子 演算子は、データ型に対してさまざまな操作を実行するために使用されます。マインド マップは、算術演算子、比率など、Python のさまざまな演算子の種類をカバーしています。

C言語のconstを深く理解する C言語のconstを深く理解する Feb 18, 2024 pm 12:56 PM

C の const の詳細な説明とコード例 C 言語では、const キーワードを使用して定数を定義します。これは、プログラムの実行中に変数の値を変更できないことを意味します。 const キーワードは、変数、関数パラメータ、関数の戻り値を変更するために使用できます。この記事では、C 言語での const キーワードの使用法を詳細に分析し、具体的なコード例を示します。 const 変更された変数 const を使用して変数を変更する場合、その変数は読み取り専用変数であり、値が割り当てられると変更できないことを意味します。例: 定数

See all articles