是否正在复制列表上的python int值?

是否正在复制列表上的python int值?,python,python-2.7,Python,Python 2.7,我试图解决一个问题,我被要求将NxN矩阵旋转90度。我已经写了代码。然而,我遇到了一些问题,因为python正在交换引用,而不仅仅是值。有人能帮我弄清楚如何交换integer对象的值而不是交换引用吗?我已将我的代码包括在下面: def rotate90(image): print image n = len(image) for i in range(n): for j in range(n): hold = image[i][j

我试图解决一个问题,我被要求将NxN矩阵旋转90度。我已经写了代码。然而,我遇到了一些问题,因为python正在交换引用,而不仅仅是值。有人能帮我弄清楚如何交换integer对象的值而不是交换引用吗?我已将我的代码包括在下面:

def rotate90(image):
    print image
    n = len(image)
    for i in range(n):
        for j in range(n):
             hold = image[i][j]
             hold2 = image[j][n-i-1]
             image2[i][j] = hold2
             image2[j][n-i-1] = hold
    return image


print rotate90([[1,2,3],[4,5,6],[7,8,9]])

此函数将旋转列表的NxN列表

def rotate(m):
    return [list(reversed(ll)) for ll in zip(*m)]
在2.7和3.4中,哪一个应保持不变(处理发电机工作方式的差异)

使用
zip(*m)
解压列表的原始列表,并将每个结果列表作为单独的参数传递给zip。因此

l = [[1,2,3],[4,5,6],[7,8,9]]
zip(*l)
相当于

zip([1,2,3], [4,5,6], [7,8,9])

这里的一些答案让我有点困惑:另一个答案将列表旋转180度,而不是要求的90度,并且没有这样做,这是OP想要的。因此,我在下面提供我自己的解决方案:

def rotate90(image):
    n = len(image)
    for i in range(n//2):
        for j in range(i, n-i-1):
            e1 = image[i][j]
            e2 = image[j][n-i-1]
            e3 = image[n-i-1][n-j-1]
            e4 = image[n-j-1][i]
            image[i][j] = e4
            image[j][n-i-1] = e1
            image[n-i-1][n-j-1] = e2
            image[n-j-1][i] = e3
例如:

>>> image = [[1,2,3], [4,5,6], [7,8,9]]
>>> rotate90(image)
>>> image
[[7, 4, 1], [8, 5, 2], [9, 6, 3]]

在python中,基本数据类型(如int)不是通过引用传递的,而是始终通过值传递的。@Sieg-no;在Python中,所有内容都是按值传递的,但该值是一个对象引用(有时称为“按赋值传递”)。没有基元类型,存在不可变类型。@jonrsharpe不确定OP想要什么,但矩阵的旋转意味着输出必须是
[[7,4,1],[8,5,2],[9,6,3]
。如果我错了,请纠正我。@BhargavRao;在这种情况下,
map(反转,zip(*image))
就可以了it@BhargavRao在这种情况下,我认为一个好的答案可以解释当前代码不起作用的原因,展示如何修复它,并提出更广泛的改进方法。仅仅给出替代代码并不能向OP解释为什么他们目前的方法有缺陷,让他们以后再次犯同样的错误。话虽如此,由于OP还没有发布评论,所以还不完全清楚问题是什么。真的需要能够将这种事情作为评论发布。不希望这会被接受为答案,但在md之前,你能解释一下zip(*m)--*这是否真的旋转了
m
?在销毁
m
之前,它会创建一个全新的
列表,不是吗?不,但将其称为
m=rotate(m)
会对您产生这种效果。我通常不喜欢修改argumentsTrue,但如果OP的数组很大,他可能更喜欢修改它作为参数。。。