Python共享引用

时间:2017-08-06 22:50:42

标签: python

我对以下代码感到困惑

<?php
$message = "b9ssRELdtRWVlNuJqaYUrg==";
$searchHash = base64_decode(rawurldecode($message));
$key = "SecretKeySecretKeySecret";
$decrypted = mcrypt_decrypt(MCRYPT_3DES, $key, $searchHash, MCRYPT_MODE_ECB);
//$data = unserialize($decrypted);
$searchString = str_replace("\x0", '', $decrypted);

echo $searchString;

为什么L1 = [3,6,9,12] L2 = [L1]*3 L3=[list(L1)]*3 L4 = [list(L1) for i in range(3)] L1[0]=100 L2 [[100, 6, 9, 12], [100, 6, 9, 12], [100, 6, 9, 12]] L3 [[3, 6, 9, 12], [3, 6, 9, 12], [3, 6, 9, 12]] L4 [[3, 6, 9, 12], [3, 6, 9, 12], [3, 6, 9, 12]] L3不受第五行代码的影响?这意味着只有L4L2共享对象。有人可以解释为什么L1L3不创建共享对象而只有L4呢?

1 个答案:

答案 0 :(得分:0)

list(foo)创建一个新的列表对象,用于复制foo中项目的各个值。因此,修改foo对象(在您的情况下为L1)不会影响新列表中的值。

L2是一个包含3个L1引用的列表。

L3L4是包含3个L1副本的列表。

您可以使用id()功能来观察此事。