Python赋值及其工作原理

时间:2016-05-13 21:28:23

标签: python variable-assignment

运行以下代码的结果是什么?

def insert(lst, em):
  # insert em in sequence lst
  i = 0
    while em > lst[i]:
      i = i+1
      if i == len(lst):
        break

  lst[:] = lst[:i] + [em] + lst[i:]

def choose(lst1, lst2):
  # pick list
  if lst1[0] < lst2[0]:
    return lst1
  else:
    return lst2

  l1 = [4]
  l2 = [6]
  insert(l2,5)
  insert(l1,5)
  l3 = choose(l1,l2)
  print l1,l3############
  insert(l3,1)
  print l1,l2,l3

    >>> ================================ RESTART ================================
    >>> 
    [1, 4, 5] [5, 6] [1, 4, 5]

所以我知道在插入(l3,1)之前我得到了L1 = L3 = [4 5] 并且L2 = [5 6]并且我同意在插入(L3,1)之后被称为L3 = [1 4 5]但是我不明白为什么L1也会改变。有人可以为我澄清这个吗?

1 个答案:

答案 0 :(得分:1)

以下是一步一步发生的事情:

l3 = choose(l1,l2)

重要的是要意识到当你说l3时,l1被分配到与insert(l3,1)完全相同的列表 - 也就是说,它们指向完全相同的内存位置。因此,当您致电l1时,您也有效地插入choose()

此博客文章可能有助于解释更多内容:http://henry.precheur.org/python/copy_list

如果您lst1使用lst2(或list(lst1)返回list(lst2)x = [4,5,6] id(x) -- returns 4369059920 y = x id(y) -- returns 4369059920 (same as id(x)) y = list(x) -- make a copy of x id(y) -- returns 4368985048 -- something different from id(x) 的副本,情况会有所不同。例如,请考虑这些陈述序列:

string1 = '> [HELP.SELECTOR]'