为什么这个赋值语句不是单向的?

mis*_*rko 1 python python-3.x

这个问题很容易理解,这里是程序 -

hisc = [1,2,3,4]
print("\n", hisc)

ohisc = hisc
hisc.append(5)

print("\nPreviously...", ohisc)
print("\nAnd now...", hisc)
input("\nETE")
Run Code Online (Sandbox Code Playgroud)

当我运行它时ohisc获得5.为什么ohisc会改变?如何阻止它改变?如果这是显而易见的事情,请道歉.

Kon*_*lph 5

Python变量是引用.因此,赋值复制引用而不是变量的内容.

为了避免这种情况,您所要做的就是创建一个对象:

ohisc = list(hisc)
Run Code Online (Sandbox Code Playgroud)

这是使用list构造函数,它从给定的iterable创建一个新列表.

或者,您也可以从切片(创建新对象)进行分配:

ohisc = hisc[:]
Run Code Online (Sandbox Code Playgroud)

[]一般切片运算符,用于从给定集合中提取子集.我们简单地省略了开始和结束位置(它们分别默认为集合的开头和结尾).