python元祖,列表,字典遍历赋值的问题

最近看了“中莽” 上的一片文章: “一切从游戏开始”是一个很好的通过python来联系的例子,但是在练习的时候发现以前没有接触国的问题:在遍历元祖,列表,字典的时候赋值出现了问题,所以写了一些很短小的代码来找问题:
在字典中的遍历:
>>> d={1:2,3:4,6:7}
>>> for i in d:
...  print i
...  
1
3
6
>>> print i
6
>>> type(i)
>>> d={1:2,3:4,6:7}
>>> for i in d:
...  print i
...  
1
3
6
>>> i="haha"
>>> print d
{1: 2, 3: 4, 6: 7}
>>> type(i)
i最终是一个字符串。i的改变并未对字典d造成影响。
在列表中的遍历:
>>> l=[1,2,3,4,[6,7,8]]
>>> for i in l:
...  print i
...  
1
2
3
4
[6, 7, 8]
>>> print i
[6, 7, 8]
>>> i.append('hello python!!')
>>> print i
[6, 7, 8, 'hello python!!']
>>> type(i)
>>> l.append("haha")
>>> print i
[6, 7, 8, 'hello python!!']
>>> print l
[1, 2, 3, 4, [6, 7, 8, 'hello python!!'], 'haha']
这时i变成了列表,并且当i改变的时候列表l也改变了。
为什么同样是改变,列表或者元祖被改变而字典没有改变呢?
是内部存储的方式不一样呢?
还是因为字典是”无序“的所以在遍历完了以后不会发生前n-1个值都会都会被释放,而最后N被存储。?
是不是列表和元祖以及一些有序的数据结构才有这样的特点:“变量在用的时候才会出现,在遍历的时候,每遍历一个值便赋一次值,如果共有n个值那么前n-1个值都会都会被释放,直到第n个为止。并且把i作为内部元素来存储和处理”而在遍历字典的时候由于字典是无序的所以无所谓存储和释放,所以只是把i当成是局部变量,并不存储在字典的内部结构当中。
真是失败啊!一晚上也没有找到相关的资料!待发完贴之后看大牛的了!