Pythonのお勉強 Part75 (715レス)
前次1-
抽出解除 必死チェッカー(本家) (べ) 自ID レス栞 あぼーん

リロード規制です。10分ほどで解除するので、他のブラウザへ避難してください。
652
(3): デフォルトの名無しさん (ワッチョイ f66d-1ngM) [sage] 2025/08/10(日) 10:26:55.01 ID:wmWYPlFf0(1/9) AAS
648の例で言うと、x = "foo"は(C言語レベルでは)名前(変数)xが束縛されているメモリ領域(646風にいえばxという箱)にオブジェクト"foo"のアドレス情報を入れるという形で処理されるし、y = x は(C言語レベルでは)名前(変数)yが束縛されているメモリ領域(646風にいえばyという箱)にオブジェクト"foo"のアドレス情報を入れるという形で処理されることになる。したがって、(C言語レベルでは)646の箱=値という説明で一応一貫した説明ができる。ただし、そこでいう「値(オブジェクト)」はPythonレベルの値(オブジェクト)ではないので、その点に説明・注釈が必要になる。
ラベル(名札)のイメージによる説明というのは、名前x, y が束縛されているメモリ領域を特には観念せず、x, y をオブジェクト"foo"に貼り付けられるラベルとして捉えるということで、Pytnonレベルのみで考えるならこれはこれで1つの説明にはなっていると思う。ただ、listとかのコレクション・コンテナを理解するためには、結局どこかの段階でC言語のポインタの概念を大雑破にでもマスターせざるを得ないと思うんだよね。最初だけポインタの概念を回避してもあまり意味がないように思うので、それが、ラベル(名札)イメージによる説明にあまり乗りたくない個人的な理由。
ちなみに、648の逆パターンの例(x = 2 x = 5 のような再代入のパターン)も同様に考えることができる。
656
(1): デフォルトの名無しさん (ワッチョイ f66d-1ngM) [sage] 2025/08/10(日) 11:16:35.60 ID:wmWYPlFf0(2/9) AAS
>>655
y = x という代入構文において、①右辺のx という名前参照式の評価(名前xが束縛されているメモリ領域に格納されているポインタのポイント先のオブジェクトを得ること)、②それを名前yに代入すること(C言語レベルでは652に書いたとおり、名前yが束縛されるメモリ領域に上記①で得られたオブジェクトのアドレス情報を格納するという形で処理される)という処理が行われるわけだけど、このプロセスに状況(コンテキスト)による違いなんてあるかな? 状況(コンテキスト)如何に拘らず、上記①②の処理がなされると思っていたんだけど。

まぁ、内部実装についてある程度知識がないと分かりづらいというのはそうだと思う。自分も非常に大雑把な知識しかないしね。
666
(2): デフォルトの名無しさん (ワッチョイ f6ce-1ngM) [sage] 2025/08/10(日) 13:22:53.03 ID:wmWYPlFf0(3/9) AAS
>>657
コレクション・コンテナを理解するためには、ラベル(名札)のアナロジーによらない方が正確に理解できるし、コレクション・コンテナの重要性を考えるとそれは致命的な弱点だと思うけどね。たとえば、tupleのimmutabilityに関してtupleオブジェクトの要素であるlistの要素に変更があってもそれはtupleのimmutabilityには反しないということを学ぶけど、それは内部実装のイメージがないとわかりにくいと思うよ。
初めのうちから内部実装をベースに理解しようとするのはたしかにムリがあるけれども、ラベル(名札)のアナロジーによる説明は所詮小手先の誤魔化しに過ぎないので、どこかの段階で内部実装に基づく(といっても大したレベルではなく、C言語のポインタの概念の基本を知っていれば足りるレベル)理解に切り替えた方が良いと思うけどね。

>>661
自分は、代入構文の説明としては、結局は箱のイメージで説明するのが(主にラベル(名札)のアナロジーによる説明との比較で)ベターではないかと考えているので、その点では646にも近い立場だけど、それがシンプルに理解できるとは微塵も考えていない。箱に格納されるのはアドレス情報であってそれ自体としてはPytnonのオブジェクトではないし、C言語レベルの内部実装に関する知識に依拠した説明になるからね。647に書いたとおり、本来的には(C言語レベルでは)比較的シンプルなはずのアイデアが、Pytnonでは(仕方のないことではあるけれども)屈折した表れ方になるなぁと思っている。
なお、「コンテキスト(状況)」という語をどういう趣旨で使いたかったのかというのは分かったけど、652に対する批判の文脈でどういう意味合いを持たせたかったのかはよく分からないな。
670: デフォルトの名無しさん (ワッチョイ f6ce-1ngM) [sage] 2025/08/10(日) 14:29:10.70 ID:wmWYPlFf0(4/9) AAS
仮にそれをそのまま実装に反映させるなら、Pytnonオブジェクトに(被参照カウント数に加えて)参照元のリストも持たせるってことでしょ。
そうではなく、単に解釈モデルに過ぎないってことなら、内部実装がそうなっているわけでもないのに、あえてそんな不自然な解釈モデルを作ってまで荷札(ラベル・名札)のアナロジーに拘る意味ってあるのかな? たとえばそれで、(666でちょっと触れた)tupleの要素であるlistの要素を変更してもtupleのimmutabilityに反しないことの説明がしやすくなったりする?
677
(1): デフォルトの名無しさん (ワッチョイ f64c-1ngM) [sage] 2025/08/10(日) 16:46:12.05 ID:wmWYPlFf0(5/9) AAS
Pytnonの言語仕様として「代入文」という名称で規定されているんだから、ひとまずこのスレで「代入」と呼ぶことには何の問題もないと思うけどね。それが数学における代入概念とは意味が違うから別の呼び方をすべきだというのは1つの意見としては傾聴に値すると思うけど、それはまた別の話でしょ。

>>673
それは661でコンテキスト(状況)として挙げられた要素に対応する違いであるか甚だ疑問だし、そもそも「箱を箱の中身が示す値として取り扱う」というようなふわっとした理解だから混乱するのでは。
大前提として、①名前と②名前が束縛されるメモリ領域(=箱)とは区別される概念だけどこれはいい? それから、②名前が束縛されるメモリ領域(=箱)と③そこに格納されている実体(オブジェクト・値)も区別される概念だけどこっちはいいよね。たぶん、①②の区別が曖昧だから「箱を箱の中身が示す値として取り扱う」というような表現が出てくるんだと思うけど。
注意すべきは「変数」という用語の多義性で、この語は上記①〜③のいずれを指すか曖昧なまま使われがち。かつそういう曖昧な認識のまま「変数=箱」という説明がされがちなので混乱が起きるんだと思うけどね。なお、そういう観点からいうと、646の「箱=値」という表記の仕方も(直感的にはわかりやすいけれども)こういう曖昧な理解を助長する弊害はあるんだろう。
上記のような概念的な区別がきちんとできている限り、コンテキスト(状況)如何で変わるような話ではないということは理解しやすいと思うけどどうかな(あるいは、必要なのは概念的な区別であって、コンテキスト(状況)の場合分けではないという言い方をしても良い)。
680: デフォルトの名無しさん (ワッチョイ f64c-1ngM) [sage] 2025/08/10(日) 17:15:06.72 ID:wmWYPlFf0(6/9) AAS
メモリ領域を箱に例えるのはコンピューターのアーキテクチャーに忠実な良い例えだと思うけどね。Pytnonみたいな言語ではC言語レベルに還元しないと正確な理解に到達できないという憾みはあるが、それでもラベル(名札・荷札)のアナロジーのような曖昧なイメージに頼るよりよほど良いと思うよ。

ところで、丸数字って今でも読みづらく化けたりする? 5chみたいなところで使う分には、もう、そんなに気にしなくても良い時代かなと思っていたんだが。
685
(2): デフォルトの名無しさん (ワッチョイ f64c-1ngM) [sage] 2025/08/10(日) 19:11:26.73 ID:wmWYPlFf0(7/9) AAS
>>682
何の説明もなくって、代入文の右辺の式が評価されるのは代入文の言語仕様そのままでしょ。何か不明確な点ってある?
代入文の左辺か右辺かの違いもコンテキスト(状況)の違いであって、そのいずれであるかによって言語処理系による名前(変数)の扱いが異なるという趣旨のことを主張したいのなら別に積極的に異論をとなえるつもりもないけれども、それについて、Pytnonの言語リファレンス等で明らかになっていることに付け加えて何か説明しなきゃいけないことってあるかな?
「箱自体を値として使う場合」(648)とか「箱を箱の中身が示す値として使う状況」(673)というのは概念上の区別が不十分であることに基づく不正確な表現・理解だと思うけど、その点が正された後になお何か理解できない点があるの?
689: デフォルトの名無しさん (ワッチョイ f64c-1ngM) [sage] 2025/08/10(日) 19:35:35.63 ID:wmWYPlFf0(8/9) AAS
2がオブジェクトであることは print( id( 2 ) ) とかしてみれば分かる。
よく使う整数はあらかじめ生成しているんじゃなかったっけ。どの範囲かは以前このスレで見たような気がするが忘れちゃった。
691: デフォルトの名無しさん (ワッチョイ f64c-1ngM) [sage] 2025/08/10(日) 19:48:29.35 ID:wmWYPlFf0(9/9) AAS
RubyとかJavaScriptと違ってPytnonは即値を使わず全部PyObjectじゃなかったっけ? 正直、記憶が曖昧なので自信はないが。
前次1-
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.031s