Oh 脳《144》続々・ようこそ Python のトワイライトゾーンへ《問題篇》

記事一覧Oh 脳: after ZERO《其之佰肆拾肆》

続々・ようこそ Pythonトワイライトゾーンへ… (@,@)《問題篇》

《監修》小泉ひよ子とタマゴ倶楽部

セミナーの枕で紹介した小ネタ集です。息抜きや話題作りにどうぞ (^.^)

Python には、知る人ぞ知る、さまざまなトワイライトゾーンが存在します。

  • 今回は、続々編として(Python1.5 で作成した資料を)Python3.1 で再構成したものを紹介します。

過去に作成したセミナー資料を整理していると、次のようなものが出てきました。

■ 問題篇(1)長さが1の文字列
>>> ================================ RESTART ================================
>>> s1 = "A"
>>> s2 = "A"
>>> s3 = chr(65)
>>> s = s1,s2,s3
>>> for e in s: e, hex(id(e))

('A', '0xe7d60')
('A', '0xe7d60')
('A', '0xf7aa0')

変数 s1,s2,s3 によって束縛される文字列オブジェクトについて、

  • どれも同じリテラル表現 'A' を持ちますが、
  • すべてが同じ文字列オブジェクトとは限りません。
>>> # -------------------- begin
>>> ???


>>> # -------------------- end
>>> s = s4,s5,s6
>>> for e in s: e, hex(id(e))

('A', '0xf7aa0')
('A', '0x630ee0')
('A', '0x124d260')

変数 s4,s5,s6 によって束縛される文字列オブジェクトについて、

  • どれも同じリテラル表現 'A' を持ちますが、
  • すべて異なる文字列オブジェクトです。

これらの文字列オブジェクトを生成するために、??? で何を実行したか、その可能性を模索してください。□

■ 問題篇(2)長さが2以上の文字列
>>> ================================ RESTART ================================
>>> s1 = "AB"
>>> s2 = "AB"
>>> s3 = "A"+"B"
>>> s = s1,s2,s3; s
('AB', 'AB', 'AB')
>>> for e in s: e,hex(id(e))
	
('AB', '0x613560')
('AB', '0x613560')
('AB', '0x613560')

変数 s1,s2,s3 によって束縛される文字列オブジェクトについて、

  • どれも同じリテラル表現 'AB' を持つだけでなく、
  • すべて同じ文字列オブジェクトです。
>>> # -------------------- begin
>>> ???


>>> # -------------------- end
>>> s = s4,s5,s6,s7,s8; s
('AB', 'AB', 'AB', 'AB', 'AB')
>>> for e in s: e,hex(id(e))

('AB', '0x122d080')
('AB', '0x115bf40')
('AB', '0x1254140')
('AB', '0x1254200')
('AB', '0x12542c0')

変数 s4,s5,s6,s7,s8 によって束縛される文字列オブジェクトについて、

  • どれも同じリテラル表現 'AB' を持ちますが、
  • すべて異なる文字列オブジェクトです。

これらの文字列オブジェクトを生成するために、??? で何を実行したか、その可能性を模索してください。□

《note》詳細は、中級編「ソースコードの歩き方」で解説します。

関連記事

Last updated♪2009/12/26