python中列表的赋值

最近刚刚学习python语言,发现python中列表的赋值很像C++中数组的赋值方式,不过各方面都比C++方便很多啊。

[python]view plaincopy

  1. c = [1,8,9,3,4]
  2. d = c
  3. print c[0]
  4. print d[0]
  5. print '========================='
  6. d[0] = 100
  7. print c[0]
  8. print d[0]

输出结果:

1

1

=========================

100

100

这样的简单赋值 其实是将C和D指向同一个列表。很像C/C++真的数组指针赋值哈。

[cpp]view plaincopy

  1. int a[] = {1,3,7,8,6,4};
  2. int b[6] = a;
  3. cout << a[0] << endl;
  4. cout << b[0] << endl;
  5. cout << "======================================"<< endl;
  6. b[0] = 100;
  7. cout << a[0] << endl;
  8. cout << b[0] << endl;

输出结果:

1

1

=========================

100

100

也许python列表赋值和C语言中的指针一样,指向同一个内存地址吧。

但是python中可以用分片的方式。复制出一份新的列表的副本,而不是指向同一个列表

[python]view plaincopy

  1. e = [1,8,9,3,4]
  2. f = e[:]
  3. print e[0]
  4. print f[0]
  5. print '========================='
  6. f[0] = 100
  7. print e[0]
  8. print f[0]

输出结果:

1

1

=========================

1

100

可以看出,列表e和f完全是两个列表。

列表中有很多操作,比如sort之类的,都是不返回新副本的。所以改变原来的列表,并不是我们希望的。