Python 为什么将字典作为参数传递要花费更多的时间?

Python 为什么将字典作为参数传递要花费更多的时间?,python,dictionary,Python,Dictionary,我试图解决一个leetcode问题。我发现下面的代码之一抛出了一个超过时间限制的错误。我创建了以下测试代码。我发现第一个单程字典作为一个参数比另一个需要更多的时间。0.94秒对0.84秒。 有人能解释一下吗 class Solution(object): def longestPalindromeSubseq(self, x): """ :type s: str :rtype: int """ #dic =

我试图解决一个leetcode问题。我发现下面的代码之一抛出了一个超过时间限制的错误。我创建了以下测试代码。我发现第一个单程字典作为一个参数比另一个需要更多的时间。0.94秒对0.84秒。 有人能解释一下吗

class Solution(object):
    def longestPalindromeSubseq(self, x):
        """
        :type s: str
        :rtype: int
        """

        #dic = {}

        def helper(s, dic):
            if len(s) == 0:
                return 0
            if len(s) == 1:
                return 1

            if s in dic:
                return dic[s]

            if s[0] == s[-1]:
                res = helper(s[1:-1], dic)+2
            else:
                l1 = helper(s[:-1], dic)
                l2 = helper(s[1:], dic)
                res = max(l1,l2)
            dic[s] = res
            #print (id(dic), dic)  
            return res
        d = {}
        ans = helper(x, d)
        #print (id(d), d)
        return ans

class Solution1(object):
    def longestPalindromeSubseq(self, x):
        """
        :type s: str
        :rtype: int
        """

        dic = {}

        def helper(s):
            if len(s) == 0:
                return 0
            if len(s) == 1:
                return 1

            if s in dic:
                return dic[s]

            if s[0] == s[-1]:
                res = helper(s[1:-1])+2
            else:
                l1 = helper(s[:-1])
                l2 = helper(s[1:])
                res = max(l1,l2)
            dic[s] = res
            #print (id(dic), dic)
            return res
        ans = helper(x)
        #print (id(dic), dic)
        return ans

import time
if __name__ == "__main__":
    x = "gphyvqruxjmwhonjjrgumxjhfyupajxbjgthzdvrdqmdouuukeaxhjumkmmhdglqrrohydrmbvtuwstgkobyzjjtdtjroqpyusfsbjlusekghtfbdctvgmqzeybnwzlhdnhwzptgkzmujfldoiejmvxnorvbiubfflygrkedyirienybosqzrkbpcfidvkkafftgzwrcitqizelhfsruwmtrgaocjcyxdkovtdennrkmxwpdsxpxuarhgusizmwakrmhdwcgvfljhzcskclgrvvbrkesojyhofwqiwhiupujmkcvlywjtmbncurxxmpdskupyvvweuhbsnanzfioirecfxvmgcpwrpmbhmkdtckhvbxnsbcifhqwjjczfokovpqyjmbywtpaqcfjowxnmtirdsfeujyogbzjnjcmqyzciwjqxxgrxblvqbutqittroqadqlsdzihngpfpjovbkpeveidjpfjktavvwurqrgqdomiibfgqxwybcyovysydxyyymmiuwovnevzsjisdwgkcbsookbarezbhnwyqthcvzyodbcwjptvigcphawzxouixhbpezzirbhvomqhxkfdbokblqmrhhioyqubpyqhjrnwhjxsrodtblqxkhezubprqftrqcyrzwywqrgockioqdmzuqjkpmsyohtlcnesbgzqhkalwixfcgyeqdzhnnlzawrdgskurcxfbekbspupbduxqxjeczpmdvssikbivjhinaopbabrmvscthvoqqbkgekcgyrelxkwoawpbrcbszelnxlyikbulgmlwyffurimlfxurjsbzgddxbgqpcdsuutfiivjbyqzhprdqhahpgenjkbiukurvdwapuewrbehczrtswubthodv"
    print (x)
    t0 = time.time()
    sol = Solution()
    print (sol.longestPalindromeSubseq(x))
    t1 = time.time()
    print(t1- t0)

    sol1 = Solution1()
    print (sol1.longestPalindromeSubseq(x))
    t2 = time.time()
    print(t2-t1)

Python使用了一种称为“通过共享调用”的方法。该函数仅获取参数上的别名。记住这一点,传递给函数的内容并不重要


但是脚本可能需要不同的时间来执行。它不是常数。使用递归使预测更加困难

传递参数比不传递参数花费的时间更长。它是什么类型其实并不重要。由于您在所有递归调用中传递参数,因此它会成倍增加。