[過去ログ] Pythonのお勉強 Part68 (1002レス)
上下前次1-新
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
578: (ワッチョイ d347-gj4s) 2022/11/01(火)17:59 ID:vww+azZz0(2/3) AAS
list.append()が破壊的だったかすら忘れてぐぐる
579: (ワッチョイ 8b89-g96c) 2022/11/01(火)22:54 ID:w1dGDiRI0(1) AAS
覚えられないのではない
覚えないという選択をしているのだ
覚えるために何か工夫したのか?
580: (ワッチョイ 9109-iO6U) 2022/11/01(火)22:55 ID:EqpfaKBX0(1) AAS
イテレータ判定されるのにfor できないんですが
イテレータとはforができるものではないんですか
X = type("")
if hasattr(X, '__iter__') :
for x in X : pass
581: (ワッチョイ fbe8-Sd0E) 2022/11/01(火)23:34 ID:yhai460Y0(1) AAS
X(= str)じゃなくXのインスタンスならそう
582: (ワッチョイ d347-gj4s) 2022/11/01(火)23:43 ID:vww+azZz0(3/3) AAS
覚えないといけない時点でおかしい
理解すれば覚えなくていいのが正解
list.append()は破壊的で、str.replace()は非破壊であることに、
合理的な説明は無い
その方が便利なことが多そうだからとか、メモリの都合とか、
一旦そう決めちゃったからとか、そんな理由に過ぎない
583: (ブーイモ MMdd-YnjT) 2022/11/02(水)00:26 ID:WNjxQYpUM(1/2) AAS
list.appendは配列の終わりにつけるだけ
str.replaceは配列の途中に差し込む可能性があるからでは?
メモリ操作のコストが違うじゃん
584: (ワッチョイ d347-gj4s) 2022/11/02(水)00:47 ID:ul/vZuFO0(1/4) AAS
配列が格納してある後ろに空きスペースがたくさん確保してあるならそうだろうけど
で、コストが実際に違ったとしてもそんなことは知らんがなでしかない
585(1): (ワッチョイ 8bbb-T9F3) 2022/11/02(水)00:58 ID:I1Z+o8fX0(1) AAS
みんな知ってることだけど、listはmutableでstrはimmutableだからだよ。
これでもう各関数が破壊的かどうかいちいち覚える必要はなくなったね!
586: (ブーイモ MMdd-YnjT) 2022/11/02(水)01:00 ID:WNjxQYpUM(2/2) AAS
listはある程度後ろに確保してるしコストが実際に違ったらそれは明確に合理的な理由でしょ
587: (ワッチョイ d9f0-5cND) 2022/11/02(水)01:17 ID:jyU6y3CY0(1/6) AAS
>>585
これ
まあそういうものとして覚えるしかないわけだけど
588: (テテンテンテン MMeb-kKgp) 2022/11/02(水)07:59 ID:cbFKoHcVM(1) AAS
べつに目的の物が作れればどうでもいいんじゃないの?
ミッションクリティカルなモノをコレで作ったりするのかな?
589: (ワッチョイ 9914-lAaw) 2022/11/02(水)11:06 ID:FQ1wBQnh0(1/2) AAS
listに後ろとか関係なくない?
590(1): (アウアウウー Sa9d-mHKc) 2022/11/02(水)11:21 ID:1xZXeW2Ya(1/6) AAS
linkedなリストは関係ないよな
連続したメモリに入ってる配列的なやつはアレだけど
591: (ワッチョイ 9914-lAaw) 2022/11/02(水)11:39 ID:FQ1wBQnh0(2/2) AAS
>>590
str との違いも結局これだし
592: (ブーイモ MM8d-YnjT) 2022/11/02(水)14:55 ID:VFt43YlcM(1) AAS
pythonのリストはポインタの配列でしょ?
593: (アウアウウー Sa9d-mHKc) 2022/11/02(水)18:15 ID:1xZXeW2Ya(2/6) AAS
違います
594(2): (ワッチョイ d9f0-5cND) 2022/11/02(水)18:27 ID:jyU6y3CY0(2/6) AAS
PyObject*の配列です
PyObject **ob_item; // PyObject*の配列
Py_ssize_t allocated; // アロケートされてる個数
595: (ワッチョイ d9f0-5cND) 2022/11/02(水)18:28 ID:jyU6y3CY0(3/6) AAS
cpythonなソースは読みやすい
596: (ワッチョイ d347-gj4s) 2022/11/02(水)18:42 ID:ul/vZuFO0(2/4) AAS
0から255までの数字が入った要素数1000の配列があって、
Cだとunsigned char list[1000];
みたいに宣言してlist[i]で参照するとアドレス計算で値を取ってくるけど、
pythonはどうやってるの?
597(2): (ブーイモ MM8d-YnjT) 2022/11/02(水)18:43 ID:4MCwg8YuM(1/2) AAS
ちょっと調べた限りやっぱりPythonのリストはポインタの配列だと思うんだが違うっていうなら何か教えて
insertの遅さとかで連結リストではないとは思うけど
598: (ワッチョイ 8b46-g96c) 2022/11/02(水)18:51 ID:wyluLqIy0(1) AAS
>>594が正しい
外部リンク[h]:github.com
599: (ワッチョイ d9f0-5cND) 2022/11/02(水)18:55 ID:jyU6y3CY0(4/6) AAS
cpythonのソースはマジで読みやすい
Rubyとかもうぐちゃぐちゃしてて読めねえもん
600: (ワッチョイ d9f0-5cND) 2022/11/02(水)19:05 ID:jyU6y3CY0(5/6) AAS
実際の配列のサイズはPyObject_VAR_HEADマクロのob_sizeに入ってる
601: (アウアウウー Sa9d-mHKc) 2022/11/02(水)19:12 ID:1xZXeW2Ya(3/6) AAS
>>597
別になんでもいいんです
602: (アウアウウー Sa9d-5cND) 2022/11/02(水)19:14 ID:5K2+hbiBa(1/3) AAS
答え書かれてるのに全く分かってなくて草
603: (アウアウウー Sa9d-mHKc) 2022/11/02(水)19:30 ID:1xZXeW2Ya(4/6) AAS
大学行くと実装と仕様の区別がつくようになるかも?
604: (ワッチョイ f102-+Dbv) 2022/11/02(水)19:31 ID:l50Y39h10(1/2) AAS
>>594
つまりポインタの配列
605(1): (ワッチョイ d347-gj4s) 2022/11/02(水)19:31 ID:ul/vZuFO0(3/4) AAS
listにappendすると、ポインタの配列の末尾にポインタが追加される
配列のサイズが変わるので、サイズを増やした配列を作ってコピーしないとできない
筈なのに、idを調べると変わらない
**ob_itemに入ってる値は変わるけど、**ob_item自体のアドレスは変わらない
ということ?
606: (ワッチョイ f102-+Dbv) 2022/11/02(水)19:33 ID:l50Y39h10(2/2) AAS
組み込みだから作り直した配列にidがコピーされてたり
607: (ワッチョイ fbe6-Sd0E) 2022/11/02(水)19:36 ID:oCOyjRuB0(1) AAS
VM上は指すオブジェクト変わってないのにid変わったらあかんでしょ
上下前次1-新書関写板覧索設栞歴
あと 395 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ
ぬこの手 ぬこTOP 0.014s