Python中遇到的问题

1.列表的初始化

当初始化一个n×n的列表时不能使用如下方法,

In [1]: l=[[0]*3]*3 #如此初始化会导致其它行仅是第一行的引用而不是copy In [2]: l Out[2]: [[0, 0, 0], [0, 0, 0], [0, 0, 0] In [3]: l[0][0]=1 #改变其中一行的某个元素 In [4]: l Out[4]: [[1, 0, 0], [1, 0, 0], [1, 0, 0]] #其他行跟着改变

正确的方法应该如下

In [5]: l=[[0 for _ in range(3)] for _ in range(3)] #或者l=[[0]*3 for _ in range(3)] In [6]: l Out[6]: [[0, 0, 0], [0, 0, 0], [0, 0, 0]] In [7]: l[0][0]=1 In [8]: l Out[8]: [[1, 0, 0], [0, 0, 0], [0, 0, 0]]

2.a is b与a==b 的区别

a='vhcffh.com' b='vhcffh.com' a==b # True,a和b对应实例的内容是相同的 a is b # False,a和b指向不同的实例 b=a a is b # True,a和b指向同一个实例 # 好奇怪啊!!! In [43]: a='vhcffh.com' In [44]: b='vhcffh.com' In [45]: a==b Out[45]: True In [46]: a is b Out[46]: False In [47]: a='abcde' In [48]: b='abcde' In [49]: a == b Out[49]: True In [50]: a is b Out[50]: True