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

「永遠に強力な関数」の講義で、読者に変数について簡単に紹介してきました。それ以来、変数を使用するたびに、代入という操作が必要になります。この講義では、変数と代入とその理由を読者に明確に理解してもらうために、これら 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 までご連絡ください。
Python:ゲーム、GUIなどPython:ゲーム、GUIなどApr 13, 2025 am 12:14 AM

PythonはゲームとGUI開発に優れています。 1)ゲーム開発は、2Dゲームの作成に適した図面、オーディオ、その他の機能を提供し、Pygameを使用します。 2)GUI開発は、TKINTERまたはPYQTを選択できます。 TKINTERはシンプルで使いやすく、PYQTは豊富な機能を備えており、専門能力開発に適しています。

Python vs. C:比較されたアプリケーションとユースケースPython vs. C:比較されたアプリケーションとユースケースApr 12, 2025 am 12:01 AM

Pythonは、データサイエンス、Web開発、自動化タスクに適していますが、Cはシステムプログラミング、ゲーム開発、組み込みシステムに適しています。 Pythonは、そのシンプルさと強力なエコシステムで知られていますが、Cは高性能および基礎となる制御機能で知られています。

2時間のPython計画:現実的なアプローチ2時間のPython計画:現実的なアプローチApr 11, 2025 am 12:04 AM

2時間以内にPythonの基本的なプログラミングの概念とスキルを学ぶことができます。 1.変数とデータ型、2。マスターコントロールフロー(条件付きステートメントとループ)、3。機能の定義と使用を理解する4。

Python:主要なアプリケーションの調査Python:主要なアプリケーションの調査Apr 10, 2025 am 09:41 AM

Pythonは、Web開発、データサイエンス、機械学習、自動化、スクリプトの分野で広く使用されています。 1)Web開発では、DjangoおよびFlask Frameworksが開発プロセスを簡素化します。 2)データサイエンスと機械学習の分野では、Numpy、Pandas、Scikit-Learn、Tensorflowライブラリが強力なサポートを提供します。 3)自動化とスクリプトの観点から、Pythonは自動テストやシステム管理などのタスクに適しています。

2時間でどのくらいのPythonを学ぶことができますか?2時間でどのくらいのPythonを学ぶことができますか?Apr 09, 2025 pm 04:33 PM

2時間以内にPythonの基本を学ぶことができます。 1。変数とデータ型を学習します。2。ステートメントやループの場合などのマスター制御構造、3。関数の定義と使用を理解します。これらは、簡単なPythonプログラムの作成を開始するのに役立ちます。

プロジェクトの基本と問題駆動型の方法で10時間以内にコンピューター初心者プログラミングの基本を教える方法は?プロジェクトの基本と問題駆動型の方法で10時間以内にコンピューター初心者プログラミングの基本を教える方法は?Apr 02, 2025 am 07:18 AM

10時間以内にコンピューター初心者プログラミングの基本を教える方法は?コンピューター初心者にプログラミングの知識を教えるのに10時間しかない場合、何を教えることを選びますか...

中間の読書にどこでもfiddlerを使用するときにブラウザによって検出されないようにするにはどうすればよいですか?中間の読書にどこでもfiddlerを使用するときにブラウザによって検出されないようにするにはどうすればよいですか?Apr 02, 2025 am 07:15 AM

fiddlereveryversings for the-middleの測定値を使用するときに検出されないようにする方法

Python 3.6にピクルスファイルをロードするときに「__Builtin__」モジュールが見つからない場合はどうすればよいですか?Python 3.6にピクルスファイルをロードするときに「__Builtin__」モジュールが見つからない場合はどうすればよいですか?Apr 02, 2025 am 07:12 AM

Python 3.6のピクルスファイルのロードレポートエラー:modulenotFounderror:nomodulenamed ...

See all articles

ホット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ヘンタイを無料で生成します。

ホットツール

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

DVWA

DVWA

Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、

SublimeText3 英語版

SublimeText3 英語版

推奨: Win バージョン、コードプロンプトをサポート!

メモ帳++7.3.1

メモ帳++7.3.1

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

AtomエディタMac版ダウンロード

AtomエディタMac版ダウンロード

最も人気のあるオープンソースエディター