1966年,从新加坡返回香港想忘掉过去的周慕云(梁朝伟 饰)住进东方酒店的、同他曾经熟悉的数字2046只差一号的2047号房,开始了他的卖文生涯。眼前、曾经在他身边出现过的一个个女人(章子怡、王菲、张曼玉、刘嘉玲等 饰)经过他大脑的过影后,令他对时空产生疑惑,不但忘不了过去,一幕幕往事反而更加挥之不去。 为了与过去作更好的告别,他将生活的点点滴滴化为文字,写下小说《2046》(说只要搭上了前往2046的列车,人们就可以找回失去的记忆)。
故事讲述17世纪中期,丹麦国王弗雷德里克五世宣布日德兰岛的野生荒地应被驯化、耕种、殖民化,以便文明可以传播,为王室带来新税收。但没有人敢去这片荒蛮土地,直到名叫路德维格·卡伦的士兵站了出来。
在孔雀镇的铁路旁边,生活着一个有着灰暗过去的男子——约翰·斯基尔帕(希里安·墨菲 Cillian Murphy 饰),他自幼在母亲的淫威下长大,由此养成了压抑自闭的性格。在母亲去世后,约翰的人格分裂,其内心生出象征母性的女子埃玛。约翰就这样在男女两个身份间转换,过着平静而扭曲的隐蔽生活。某个清晨,灾祸突然降临。一个火车头脱轨闯入约翰家的院子,正在晾晒衣物的埃玛受到惊吓,并且出现在小镇人民的面前。人们对此议论纷纷,约翰则希望尽快将火车头清除院子,然而政客们却打算以此作为政治斗争的砝码。面对种种混乱的局面,约翰和埃玛的心中焦虑重重,他们的矛盾也渐次激化……