1
XYxe 2017-05-04 11:06:50 +08:00 via Android 1
第一种情况的两个 root 是同一个 list 的引用。
第二种情况是创建了一个新的 list,元素是[root, root, None],这时候的 root 是[],然后把 root 指向这个对象,但是新 list 的前两个元素还是指向原来的那个[]。 |
2
lilydjwg 2017-05-04 11:10:51 +08:00
|
3
buckyRRRR 2017-05-04 12:04:19 +08:00
root =[]
创建一个空列表对象,假设地址是 11111,root 变量存这个地址 root[:] = [root, root, None] 1.先执行[root, root, None] ,创建一个含三个元素的列表对象,地址假设为,22222,其中前两个 root 变量存的是 11111 这个地址, 2.执行 root[:],复制一个空列表对象,把这个新对象地址存在 root 变量里,因为是复制出来的是新对象,所以 root 里存的地址从 11111 变成 33333 (假设) 3.进行赋值 root 存的地址存 33333 变成 22222,也就是指向[root, root, None] ,而此时[root, root, None] 里面的 root 又指向[root, root, None] ,然后会无限循环下去 |
4
thekoc 2017-05-04 12:58:17 +08:00
几种写法的比较:
root = [1, 2] root[:] = [root, root, None] 和 root = [1, 2] root[0:2] = [root, root, None] 和 root = [1, 2] root = [root, root, None] 和 root = [1, 2] root[0] = [root, root, None] 1、3、4 都是一样的,root 引用的还是同一个对象,但是对象里面的内容变了。2 则是 root 本身引用的对象变为了另一个对象。 |
5
ziyo12580 2017-05-04 17:56:07 +08:00
|
6
thekoc 2017-05-04 18:39:32 +08:00
|