1928年,伪满洲国的日本翻译伊丹英彦(仲村亨)离开中国情人丁慧(章子怡)返回日本,数年后他再次回到中国的上海,这次他已经成为了一名高级特务。然而,他不知道的是,丁慧已经成为了地下抗日组织的成员,并且与该组织的首领谢明(冯远征)相爱。当抗日组织派人去火车站接外地聘请的暗杀日本情报人员山本的杀手时,他们误认为小职员司徒(刘烨)就是山本。在混乱中,丁慧错误地杀死了司徒的女友依玲(李冰冰),而司徒则被伊丹英彦抓获。经历了一系列困惑的事件后,司徒被释放,并立誓要为依玲报仇。丁慧和伊丹英彦再次相遇,他们成为了两股势力互相利用的重要棋子。丁慧内心深受误杀无辜的痛苦折磨。在一个日本会所举办的舞会上,伊丹英彦告诉丁慧山本和谢明都已经死了,这让丁慧感到震惊。她打算刺杀伊丹英彦的时候,司徒带着枪闯入了舞会。