Python を書いていると、import と from import の2種類の書き方が登場します。 私は当初「ただの書き方の違い」だと思っていました。しかし実際には、読み込んでいる対象がまったく違うため、コードの書き方も構造も変わります。
ここでは、私が実際にコードを書いていて気づいたポイントを整理します。
私が実際に確認した import と from import の違い
Python の datetime モジュールで、import と from import を使い分けたときに、コードの書き方がどのように変わるのかを実際に確認しました。
比較したのは次の2つです。
from datetime import datetime, timedeltaimport datetime
この2つは「ただの書き方の違い」ではなく、読み込んでいる対象が違うため、使い方が変わります。
from datetime import datetime, timedelta を使う場合
from datetime import datetime, timedelta と書くと、読み込んでいるのは datetime モジュールの中にある datetime クラスと timedelta クラスそのものです。
そのため、コードは次のように書けます。
from datetime import datetime, timedelta day_3 = datetime(2026, 8, 20) + timedelta(days=3) # 3日後
この書き方では、datetime も timedelta も クラス名として直接使えるため、モジュール名を前につける必要がありません。
import datetime を使う場合
import datetime と書くと、読み込んでいるのは datetime モジュール全体です。
そのため、クラスを使うときはモジュール名を前につける必要があります。
import datetime day_3 = datetime.datetime(2026, 8, 20) + datetime.timedelta(days=3) # 3日後
このように、datetime.datetime や datetime.timedelta のように モジュール名.クラス名 という二段構造になります。
違いが生まれる理由
上記の違いは、単なる書き方の違いではありません。 import している対象が違うから、使い方も変わるという構造的な理由があります。
from datetime import datetime→ datetime クラスを読み込むimport datetime→ datetime モジュールを読み込む
この違いが、コードの書き方の違いとして表面に現れます。
まとめ

from importは モジュール内の特定のクラスや関数を直接読み込むimportは モジュール全体を読み込む- その結果、使い方が変わる
- datetime の例は違いが最も分かりやすい
私はこれを理解するまで「書き方の違い」だと思っていました。しかし、構造で理解すると、Python の import がとてもクリアになりました。
