Python 3.x 函数中的变量似乎不是局部变量

Python 3.x 函数中的变量似乎不是局部变量,python-3.x,global-variables,rename,deque,Python 3.x,Global Variables,Rename,Deque,我写了一个程序,它接受一个初始序列并对其执行3个函数,然后给出3个答案,但我想保持原始变量的完整性,以便可以重用。在论坛上,我得出结论,函数中的变量应该是局部变量,但它似乎是全局变量 from collections import deque from sys import exit initial_state = (1,2,3,4,5,6,7,8) initial_state = deque(initial_state) def row_exchange(t): t.reverse(

我写了一个程序,它接受一个初始序列并对其执行3个函数,然后给出3个答案,但我想保持原始变量的完整性,以便可以重用。在论坛上,我得出结论,函数中的变量应该是局部变量,但它似乎是全局变量

from collections import deque
from sys import exit
initial_state = (1,2,3,4,5,6,7,8)
initial_state = deque(initial_state)

def row_exchange(t):
    t.reverse()
    return t
def rt_circ_shift(t):
    t.appendleft(t[3])
    del t[4]
    t.append(t[4])
    del t[4]
    return t
def md_clk_rot (t):
    t.insert(1,t[6])
    del t[7]
    t.insert(3,t[4])
    del t[5]
    t.insert(4,t[5])
    del t[6]
    return t



print(row_exchange(initial_state))
print(initial_state)
print(rt_circ_shift(initial_state))
print(md_clk_rot(initial_state))
我希望得到:

deque([8, 7, 6, 5, 4, 3, 2, 1])
deque([1, 2, 3, 4, 5, 6, 7, 8])
deque([4, 1, 2, 3, 6, 7, 8, 5])
deque([1, 7, 2, 4, 5, 3, 6, 8])
但我得到的却是:

deque([8, 7, 6, 5, 4, 3, 2, 1])
deque([8, 7, 6, 5, 4, 3, 2, 1])
deque([5, 8, 7, 6, 3, 2, 1, 4])
deque([5, 1, 8, 6, 3, 7, 2, 4])
那么为什么我的变量不是函数中的局部变量呢? 有没有办法在函数中重命名输出,使其不使用相同的标识符初始状态? 我对编程相当陌生,因此请您多加解释。

Per:

将deque的元素反转到位,然后返回None

(我的重点)。所以

def row_exchange(t):
    t.reverse()
    return t

row_exchange(initial_state)
修改
初始状态
。请注意,
append
appendleft
insert
也会修改
deque


要在不修改
t
的情况下反转,可以使用

def row_exchange(t):
    return deque(reversed(t))

在每个函数中,
t
是一个局部变量。你看到的效果是 不是因为
t
某种程度上是全局性的——它不是。事实上,你会得到一个
namererror
如果您试图在全局范围内引用
t


有关为什么修改局部变量会影响局部范围外的值的更多信息,请参阅Ned Batcheld的。特别是,请看两次有关函数
augment\u
的讨论