【问题标题】:List value issue列表值问题
【发布时间】:2015-11-05 19:12:52
【问题描述】:

首先,抱歉标题不好。我不知道如何描述这个问题:

a = 1
b = 2
c = 3

aa = 0
bb = 0
cc= 0

list = [[1, a] ,[2, b] ,[3 ,c]]
print(list)

secondList = [aa, bb, cc]

x = -1
for item in list:
    x=x+1
    if list[x][1] == a:
        print(aa, "aa")
        secondList[x] = secondList[x] + 1
        print(aa , "aa")
        print(x, "x")
        print(secondList[x], "SecondList[x]")
        secondList = [aa, bb, cc]
        print(secondList)

我希望:

[[1, 1], [2, 2], [3, 3]]
0 aa
1 aa
0 x
1 SecondList[x]
[1, 0, 0]

但我得到了:

[[1, 1], [2, 2], [3, 3]]
0 aa
0 aa
0 x
1 SecondList[x]
[0, 0, 0]

为什么我打印它或secondList时aa的值没有改变,但我打印secondList[x]时是?

【问题讨论】:

    标签: python list variables printing


    【解决方案1】:

    因为它们是独立的,所以一个是变量 aa,另一个是第二个列表的第一个元素。

    在做:

    secondList = [aa, bb, cc]
    

    不依赖

    【讨论】:

      【解决方案2】:

      更改列表“secondList”中第一个位置的值与更改变量“aa”的值无关。

      当您创建 secondList 时,您在一个与 aa,bb,cc 使用的地址不同的新内存地址中使用变量 aa,bb,cc 的值。

      【讨论】:

        【解决方案3】:

        整数是不可变的,因此当您执行secondList[x] + 1 时,您正在创建一个具有值1 的新整数对象并将其粘贴在您的列表中,而不是修改存储在aa 中的不可变0

        【讨论】:

          【解决方案4】:

          线

          secondList = [aa, bb, cc]

          aa, bb, cc复制到secondList。虽然 Python 中的整数是对象,用户定义的对象是由 reference 复制的,但它们是 primitive 类型,因此浅拷贝足以创建一个新的整数相同的值。

          因此aa 不指代secondList[0]。所以secondList[x] = secondList[x] + 1 不会更新aa

          编辑:为了证明我的意思,请尝试以下操作:

          x = 1
          y = x
          x = 2
          print(y)
          

          这暗示您会认为这会打印“2”,但实际上它会打印“1”。这表明整数和所有其他基本类型都是按值复制的。

          【讨论】:

          猜你喜欢
          • 2012-03-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-09-25
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多