我对以下代码感到困惑
<?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
不受第五行代码的影响?这意味着只有L4
与L2
共享对象。有人可以解释为什么L1
和L3
不创建共享对象而只有L4
呢?
答案 0 :(得分:0)
list(foo)
创建一个新的列表对象,用于复制foo
中项目的各个值。因此,修改foo
对象(在您的情况下为L1
)不会影响新列表中的值。
L2
是一个包含3个L1
引用的列表。
L3
和L4
是包含3个L1
副本的列表。
您可以使用id()
功能来观察此事。