改变价值观

时间:2016-12-07 11:47:17

标签: python python-2.7

我有这段代码,我想在循环中设置一个循环,以确定某个位置是否被访问两次。

current_dir = 1
position = [0,0]
index = 0
move_list = ["L2", "L3", "L3", "L4", "R1", "R2", "L3", "R3", "R3", "L1", "L3", "R2", "R3", "L3", "R4", "R3", "R3", "L1", "L4", "R4", "L2", "R5", "R1", "L5", "R1", "R3", "L5", "R2", "L2", "R2", "R1", "L1", "L3", "L3", "R4", "R5", "R4", "L1", "L189", "L2", "R2", "L5", "R5", "R45", "L3", "R4", "R77", "L1", "R1", "R194", "R2", "L5", "L3", "L2", "L1", "R5", "L3", "L3", "L5", "L5", "L5", "R2", "L1", "L2", "L3", "R2", "R5", "R4", "L2", "R3", "R5", "L2", "L2", "R3", "L3", "L2", "L1", "L3", "R5", "R4", "R3", "R2", "L1", "R2", "L5", "R4", "L5", "L4", "R4", "L2", "R5", "L3", "L2", "R4", "L1", "L2", "R2", "R3", "L2", "L5", "R1", "R1", "R3", "R4", "R1", "R2", "R4", "R5", "L3", "L5", "L3", "L3", "R5", "R4", "R1", "L3", "R1", "L3", "R3", "R3", "R3", "L1", "R3", "R4", "L5", "L3", "L1", "L5", "L4", "R4", "R1", "L4", "R3", "R3", "R5", "R4", "R3", "R3", "L1", "L2", "R1", "L4", "L4", "L3", "L4", "L3", "L5", "R2", "R4", "L2"]
for i in move_list:
    turn = i[0]
    movement = int(i[1:])
    if turn == "R":
        current_dir += 1
        if current_dir > 4:
            current_dir = 1
    if turn == "L":
        current_dir -= 1
        if current_dir < 1:
            current_dir = 4
    if current_dir == 1: #Move North
        position[1] += movement
    if current_dir == 3: #Move South
        position[1] -= movement
    if current_dir == 2: #Move East
        position[0] += movement
    if current_dir == 4: #Move West
        position[0] -= movement
    position_2 = position
    current_dir2 = current_dir
    turn2 = turn
    for f in move_list[index+1:]:
        turn2 = f[0]
        movement2 = int(f[1:])
        if turn2 == "R":
            current_dir2 += 1
            if current_dir2 > 4:
                current_dir2 = 1
        if turn2 == "L":
            current_dir2 -= 1
            if current_dir2 < 1:
                current_dir2 = 4
        if current_dir2 == 1:  # Move North
            position_2[1] += movement2
        if current_dir2 == 3:  # Move South
            position_2[1] -= movement2
        if current_dir2 == 2:  # Move East
            position_2[0] += movement2
        if current_dir2 == 4:  # Move West
            position_2[0] -= movement2
        print position_2
    print position
    i = + 1
    index += 1

它应该可以正常工作,但我有一个问题,当我试图改变position_2时,位置的值会改变,我真的不明白为什么。

它在这部分发生了变化

if current_dir2 == 1:  # Move North
    position_2[1] += movement2
if current_dir2 == 3:  # Move South
    position_2[1] -= movement2
if current_dir2 == 2:  # Move East
    position_2[0] += movement2
if current_dir2 == 4:  # Move West
    position_2[0] -= movement2

2 个答案:

答案 0 :(得分:0)

没关系我弄明白了,事实上我在做position2 =位置意味着他们都指向同一个arry。在我没有意识到之前,我学到了这一点。

答案 1 :(得分:0)

当你说position_2 = position时,你的问题就出现了。这使得位置点与position_2在同一个对象上。有用的文章here。你应该说:

position_2 = position[:]

使它们指向不同的物体。