Open8

読者コミュニティ|【超入門】上澄みを浚うPython【演習パートのみ有料】

たつや、たつや、

スクラップの作成ができていなかったため、記事でご指摘いただきました。
ありがとうございます。

https://zenn.dev/shiracamus/articles/e8dadf0f056661

以下記事内容の回答になります。

型ヒントについて
参考としていた書籍に載っていなかったため入門レベルではないものと判断していました。
そのため有料パートのバックエンド開発領域で触れる形で作成しています。
とは言え、誤解が生じる書き方に見えるので補足するようにいたします。

アドレスについて
記載の通りの理解でしかありませんでした。
内容修正いたします。

読んでいただき、ご指摘いただきありがとうございました。

shiracamusshiracamus

関連して、Step1-1. 「次の章で学習しますがid()関数を使って変数のアドレスを使って確認します。」の「変数のアドレス」を「オブジェクトのアドレス」に変更していただけると正しい表現になるかと思います。

shiracamusshiracamus

もうひとつありました。Step1-2「変数の型を確認したい場合はtype()関数を使います。」も、type関数の引数に渡したオブジェクトの型を確認しているので「変数に代入されているオブジェクトの型を確認したい場合はtype()関数を使います。」といった表現が正しいかと思います。
オブジェクトの型はオブジェクト自身が持っています。

>>> 123 .__class__  # 小数点に解釈されないように整数値とドットの間に空白を入れる
<class 'int'>
>>> type(123)  # type関数は引数に渡されたオブジェクトの__class__を返す
<class 'int'>
>>> 3.14.__class__
<class 'float'>
>>> "Hello".__class__
<class 'str'>
>>> [123].__class__
<class 'list'>

Pythonの変数は変数辞書に格納されていて、変数名は変数辞書にアクセスするためのキー文字列でしかないので、変数には型がないと言えます。強いて言うなら、オブジェクトを参照する参照型変数です。(C言語で言うとvoid*型で、どんな型でもそのアドレスを保持できる変数)
変数辞書は vars(), locals(), globals() 関数で確認できます。

>>> x = 123  # グローバル変数に代入
>>> globals()  # グローバル変数辞書
{'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <class '_frozen_importlib.BuiltinImporter'>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>,
 'x': 123}
>>> globals()['x']  # 変数名文字列で取得
123
>>> globals()['x'] = 456  # 変数名文字列で変更(ローカル変数辞書の場合は変更反映されない)
>>> print(x)  # 変数xの値の実体はグローバル変数辞書の中のキー'x'の値
456
たつや、たつや、

調べて(非常に簡単にですが)私が理解した内容で補足として記載しました。
教えてくださってありがとうございます。

shiracamusshiracamus

type(number)関数では10というオブジェクトの型であるintを返却します。

もう少し細かく説明すると、
type(number)では、number変数に代入されている10というオブジェクトを取り出してtype関数の引数に渡し、 type関数は引き渡された10というオブジェクトの型を調べてintを返却します。」
ということですね。

shiracamusshiracamus

Step1-3. キャスト

Python公式ドキュメントでは、キャストと言う用語はC言語インタフェースでしか使われていないようですね。
str(123)str はクラス名で、引数を指定することでオブジェクト生成します。
ミュータブルオブジェクトの場合、オブジェクトコピーに使ったりもします。

>>> x = "123"  # x = str("123") と書いたのと同じ
>>> y = str(x)  # オブジェクトコピー、ただしイミュータブルオブジェクトはコピーせずに共有
>>> id(x)
132939167622960
>>> id(y)  # イミュータブルオブジェクトは同じオブジェクトID、オブジェクト共有
132939167622960
>>> x = [1, 2, 3]
>>> y = list(x)  # リストのシャローコピー(浅いコピー)を生成
>>> id(x)
132939167601984
>>> id(y)  # ミュータブルオブジェクトは違うオブジェクトID
132939167623040