python高效试用17---两个字符串组成一个新的字符串和两个字符串组成元组作为key哪个更高效
在 Python 中,使用字符串连接 (str1 + str2) 作为 key 和使用元组 ((str1, str2)) 作为 key 的效率差异,主要受以下因素影响:
哈希计算速度:
字符串连接 (str1 + str2):会创建一个新的字符串对象,并计算哈希值。
元组 ((str1, str2)):元组的哈希值是基于内部元素的哈希值计算的,不会创建新的字符串对象。
存储和查找性能:
字符串连接:需要额外的内存来存储新创建的字符串,并且哈希计算可能稍慢。
元组:由于 Python 内部对元组的哈希计算进行了优化,通常会更高效。
测试代码:
import time
import random
import string
from pyecharts import options as opts
from pyecharts.charts import Bar
def generate_random_string(length):
return ''.join(random.choices(string.ascii_letters, k=length))
def test_dict_key_efficiency(str_lengths, n_times=10000):
results = []
for length in str_lengths:
str1 = generate_random_string(length)
str2 = generate_random_string(length)
dict_str = {}
dict_tuple = {}
# 测试字符串拼接作为 key
start = time.perf_counter()
for _ in range(n_times):
key = str1 + str2
dict_str[key] = _
str_time = time.perf_counter() - start
# 测试元组作为 key
start = time.perf_counter()
for _ in range(n_times):
key = (str1, str2)
dict_tuple[key] = _
tuple_time = time.perf_counter() - start
results.append((length, str_time, tuple_time))
return results
# 设置字符串长度列表
str_lengths = [5, 10, 15, 20]
results = test_dict_key_efficiency(str_lengths)
# 提取数据进行可视化
x_labels = [f"{length} chars" for length, _, _ in results]
y_str_times = [round(str_time,6) for _, str_time, _ in results]
y_tuple_times = [round(tuple_time,6) for _, _, tuple_time in results]
bar = (
Bar()
.add_xaxis(x_labels)
.add_yaxis("字符串拼接", y_str_times)
.add_yaxis("元组", y_tuple_times)
.set_global_opts(title_opts=opts.TitleOpts(title="字典 Key 访问时间对比"))
)
bar.render("key_efficiency_comparison.html")