Stringの不変性
メニューを表示するにはスワイプしてください
Python では、文字列はイミュータブル(不変)です。一度作成された文字列の内容(文字)は、その場で変更できません。文字列を「変更」しようとすると、実際には新しい文字列が作成されます。これは、正確性(意図しないその場での編集を防ぐ)やパフォーマンス(大きな文字列の構築方法)に影響します。
インプレース編集不可
インデックスで文字を読み取ることはできますが、代入はできません。
123456s = "hello" t = "H" + s[1:] # Creates a new string: "Hello" print(t) s[0] = "H" # TypeError: strings don't support item assignment
ほとんどの文字列メソッドは新しい文字列を返し、元の文字列は変更されません。
12345678# Cleaning up user input from a registration form user_name = " Alice " user_name.strip() # returns "Alice", but the variable still has spaces print(user_name) # " Alice " user_name = user_name.strip() # assign the cleaned value back print(user_name) # "Alice" → cleaned and ready to store
メソッドの連結(チェーン)は可能ですが、その都度新しいオブジェクトが生成されることに注意してください。
123456# Normalizing a user's chat message before saving it user_message = " hello\n" clean_message = user_message.strip().upper() print(user_message) # original remains " hello\n" print(clean_message) # "HELLO" → cleaned and ready for processing
新しい文字列を作成して「変更」
スライス、replace、連結を使って新しい値を生成。
1234567s = "data" s = s.replace("t", "T") # "daTa" print(s) s = s[:1] + "A" + s[2:] # "dATa" print(s)
効率的な構築
大きなループ内で繰り返し + を使うと遅くなることがあります(多くの中間文字列が生成されるため)。一般的なパターンは、パーツを収集して一度だけ結合する ことです:
1234# Combining message parts received from a device response_parts = ["Status:", " ", "200", "\n", "Success"] response_message = "".join(response_parts) # "Status: 200\nSuccess" print(response_message)
ノート
次の章で、さらに多くの結合やフォーマットのパターンについて学習します。
1. どの行が文字列をその場で変更しようとしてエラーになりますか?
2. このコードの出力は何ですか?
3. 多数の小さな部分から長い文字列を組み立てる必要があります。推奨される方法はどれですか?
すべて明確でしたか?
フィードバックありがとうございます!
セクション 3. 章 4
AIに質問する
AIに質問する
何でも質問するか、提案された質問の1つを試してチャットを始めてください
セクション 3. 章 4