{"id":2577,"date":"2025-09-18T00:37:09","date_gmt":"2025-09-17T22:37:09","guid":{"rendered":"https:\/\/davidka.net\/en\/?p=2577"},"modified":"2025-09-21T03:21:00","modified_gmt":"2025-09-21T01:21:00","slug":"array-array-in-python-when-and-why-to","status":"publish","type":"post","link":"https:\/\/it.davidka.net\/it\/array-array-in-python-when-and-why-to\/","title":{"rendered":"\ud83e\uddd1\u200d\ud83d\udcbb Uso di array.array in Python: quando e perch\u00e9 utilizzarlo"},"content":{"rendered":"\n<p class=\"has-neve-link-color-color has-text-color has-link-color has-medium-font-size wp-elements-4b83a8f50b83b194ebc24915ac2d72aa wp-block-paragraph\">Module&nbsp;<strong><code class=\"\" data-line=\"\">array<\/code><\/strong>&nbsp;provides a specialized data type&nbsp;<code class=\"\" data-line=\"\">array.array<\/code>&nbsp;for storing sequences of homogeneous numbers. Unlike the universal&nbsp;<code class=\"\" data-line=\"\">list<\/code>,&nbsp;<code class=\"\" data-line=\"\">array.array<\/code>&nbsp;arrays provide more efficient memory usage and increased performance when working with numerical data.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<div id=\"rtoc-mokuji-wrapper\" class=\"rtoc-mokuji-content frame2 preset1 animation-fade rtoc_open default\" data-id=\"2577\" data-theme=\"Neve - Davidka\">\n\t\t\t<div id=\"rtoc-mokuji-title\" class=\"rtoc_btn_none rtoc_left\">\n\t\t\t\n\t\t\t<span>In Questo Articolo<\/span>\n\t\t\t<\/div><ol class=\"rtoc-mokuji decimal_ol level-1\"><li class=\"rtoc-item\"><a href=\"#-key-advantages-of-arrayarray\">\ud83d\udce6 Key advantages of&nbsp;<code class=\"\" data-line=\"\">array.array<\/code><\/a><ul class=\"rtoc-mokuji mokuji_ul level-2\"><li class=\"rtoc-item\"><a href=\"#1-memory-savings-when-working-with-large-sets-of-numbers\">1. Memory savings when working with large sets of numbers<\/a><\/li><li class=\"rtoc-item\"><a href=\"#2-increased-performance-of-numerical-operations\">2. Increased performance of numerical operations<\/a><\/li><li class=\"rtoc-item\"><a href=\"#3-direct-work-with-c-libraries-ctypes-struct\">3. Direct work with C libraries (<code class=\"\" data-line=\"\">ctypes<\/code>,&nbsp;<code class=\"\" data-line=\"\">struct<\/code>)<\/a><ul class=\"rtoc-mokuji mokuji_none level-3\"><li class=\"rtoc-item\"><a href=\"#example-with-ctypes\">Example with&nbsp;<code class=\"\" data-line=\"\">ctypes<\/code>:<\/a><\/li><li class=\"rtoc-item\"><a href=\"#example-with-struct-for-data-packing\">Example with&nbsp;<code class=\"\" data-line=\"\">struct<\/code>&nbsp;for data packing:<\/a><\/li><\/ul><\/li><li class=\"rtoc-item\"><a href=\"#4-efficient-serialization-and-deserialization\">4. Efficient serialization and deserialization<\/a><\/li><li class=\"rtoc-item\"><a href=\"#5-guarantee-of-type-homogeneity\">5. Guarantee of type homogeneity<\/a><\/li><li class=\"rtoc-item\"><a href=\"#6-direct-writing-and-reading-from-binary-files\">6. Direct writing and reading from binary files<\/a><\/li><\/ul><\/li><li class=\"rtoc-item\"><a href=\"#-comparative-table-arrayarray-vs-list\">\ud83d\udd39 Comparative table:&nbsp;<code class=\"\" data-line=\"\">array.array<\/code>&nbsp;vs&nbsp;<code class=\"\" data-line=\"\">list<\/code><\/a><\/li><\/ol><\/div><h2 class=\"wp-block-heading\" id=\"-key-advantages-of-arrayarray\">\ud83d\udce6 Key advantages of&nbsp;<code class=\"\" data-line=\"\">array.array<\/code><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The key difference between&nbsp;<code class=\"\" data-line=\"\">array.array<\/code>&nbsp;and&nbsp;<code class=\"\" data-line=\"\">list<\/code>&nbsp;is&nbsp;<strong>compact data storage<\/strong>. Instead of a list of pointers to Python objects,&nbsp;<code class=\"\" data-line=\"\">array.array<\/code>&nbsp;stores values as a contiguous block of bytes, which makes it ideal for the following tasks.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"1-memory-savings-when-working-with-large-sets-of-numbers\">1. Memory savings when working with large sets of numbers<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">When processing millions of numerical elements, memory savings become critically important.&nbsp;<code class=\"\" data-line=\"\">array.array<\/code>&nbsp;significantly reduces overhead.<\/p>\n\n\n\n<pre class=\"wp-block-code line-numbers\"><code class=\" language-python\" data-line=\"\">import array\nimport sys\n\ndef compare_memory_usage(num_elements: int = 1_000_000) -&gt; None:\n    &quot;&quot;&quot;\n    Compares memory usage between list and array.array.\n\n    Args:\n        num_elements (int, optional): Number of elements for the test. \n                                      Defaults to 1,000,000.\n    &quot;&quot;&quot;\n    &lt;em&gt;# Create a list with integer Python objects&lt;\/em&gt;\n    list_numbers = list(range(num_elements))\n    \n    &lt;em&gt;# Create an array where numbers are stored as 4-byte C-type ints&lt;\/em&gt;\n    array_numbers = array.array(&#039;i&#039;, range(num_elements))\n\n    list_size = sys.getsizeof(list_numbers)\n    array_size = sys.getsizeof(array_numbers)\n\n    print(f&quot;Number of elements: {num_elements}&quot;)\n    print(f&quot;List size:  {list_size \/ 1024 \/ 1024:.2f} MB&quot;)\n    print(f&quot;Array size: {array_size \/ 1024 \/ 1024:.2f} MB&quot;)\n    if array_size &gt; 0:\n        print(f&quot;Memory savings: {list_size \/ array_size:.2f}x&quot;)\n\n&lt;em&gt;# Example usage&lt;\/em&gt;\nif __name__ == &quot;__main__&quot;:\n    compare_memory_usage()\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Output:<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code line-numbers\"><code class=\" language-python\" data-line=\"\">Number of elements: 1,000,000\nList size: 7.63 MB\nArray size: 3.82 MB\nMemory savings: 2.00x\n\n<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"2-increased-performance-of-numerical-operations\">2. Increased performance of numerical operations<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Due to contiguous memory allocation, mathematical operations on&nbsp;<code class=\"\" data-line=\"\">array.array<\/code>&nbsp;elements are performed faster, as the processor can make more efficient use of the cache.<\/p>\n\n\n\n<pre class=\"wp-block-code line-numbers\"><code class=\" language-python\" data-line=\"\">import array\nimport timeit\n\ndef compare_performance(num_elements: int = 10_000_000) -&gt; None:\n    &quot;&quot;&quot;\n    Compares the performance of summing elements in list and array.array.\n\n    Args:\n        num_elements (int, optional): Number of elements for the test. \n                                      Defaults to 10,000,000.\n    &quot;&quot;&quot;\n    setup_code = f&quot;&quot;&quot;\nimport array\ndata = range({num_elements})\nlist_data = list(data)\narray_data = array.array(&#039;i&#039;, data)\n&quot;&quot;&quot;\n    \n    &lt;em&gt;# Measure time for list&lt;\/em&gt;\n    list_time = timeit.timeit(&quot;sum(list_data)&quot;, setup=setup_code, number=10)\n    \n    &lt;em&gt;# Measure time for array&lt;\/em&gt;\n    array_time = timeit.timeit(&quot;sum(array_data)&quot;, setup=setup_code, number=10)\n    \n    print(f&quot;Time to sum {num_elements} elements (10 times):&quot;)\n    print(f&quot;list:  {list_time:.4f} seconds&quot;)\n    print(f&quot;array: {array_time:.4f} seconds&quot;)\n\n&lt;em&gt;# Example usage&lt;\/em&gt;\nif __name__ == &quot;__main__&quot;:\n    compare_performance()\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Output:<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code line-numbers\"><code class=\" language-python\" data-line=\"\">Number of elements: 10,000,000\nList time: 2.1106 seconds\nArray time: 1.1549 seconds\n\n<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"3-direct-work-with-c-libraries-ctypes-struct\">3. Direct work with C libraries (<code class=\"\" data-line=\"\">ctypes<\/code>,&nbsp;<code class=\"\" data-line=\"\">struct<\/code>)<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><code class=\"\" data-line=\"\">array.array<\/code>&nbsp;is ideal for passing data to low-level libraries written in C, as its internal structure is compatible with C arrays.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"example-with-ctypes\">Example with&nbsp;<code class=\"\" data-line=\"\">ctypes<\/code>:<\/h4>\n\n\n\n<pre class=\"wp-block-code line-numbers\"><code class=\" language-python\" data-line=\"\">import array\nfrom ctypes import c_double, CDLL\n\ndef demonstrate_ctypes_usage() -&gt; None:\n    &quot;&quot;&quot;\n    Demonstrates passing array.array to a C function via ctypes.\n    &quot;&quot;&quot;\n    &lt;em&gt;# Array with double-precision numbers (type &#039;d&#039;)&lt;\/em&gt;\n    py_array = array.array(&#039;d&#039;, &#091;1.1, 2.2, 3.3, 4.4])\n    \n    &lt;em&gt;# Create a C-compatible array from py_array&lt;\/em&gt;\n    &lt;em&gt;# The function (c_double * len(py_array)) creates a type &quot;array of 4 c_double&quot;&lt;\/em&gt;\n    &lt;em&gt;# (*py_array) unpacks the python array into the arguments of this constructor&lt;\/em&gt;\n    c_array = (c_double * len(py_array))(*py_array)\n\n    &lt;em&gt;# Here could be a call to a C function, for example:&lt;\/em&gt;\n    &lt;em&gt;# my_c_library = CDLL(&quot;.\/libmath.so&quot;)&lt;\/em&gt;\n    &lt;em&gt;# my_c_library.sum_doubles(c_array, len(c_array))&lt;\/em&gt;\n    \n    print(f&quot;Python array: {py_array}&quot;)\n    print(f&quot;C-compatible array (ctypes): {&#091;val for val in c_array]}&quot;)\n\n&lt;em&gt;# Example usage&lt;\/em&gt;\nif __name__ == &quot;__main__&quot;:\n    demonstrate_ctypes_usage()\n<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"example-with-struct-for-data-packing\">Example with&nbsp;<code class=\"\" data-line=\"\">struct<\/code>&nbsp;for data packing:<\/h4>\n\n\n\n<pre class=\"wp-block-code line-numbers\"><code class=\" language-python\" data-line=\"\">import array\nimport struct\n\ndef demonstrate_struct_packing(data: list&#091;int]) -&gt; bytes:\n    &quot;&quot;&quot;\n    Packs an array of integers into a binary string.\n\n    Args:\n        data (list&#091;int]): List of integers to pack.\n\n    Returns:\n        bytes: Binary representation of the data.\n    &quot;&quot;&quot;\n    arr = array.array(&#039;i&#039;, data)\n    \n    &lt;em&gt;# Create a format string like &#039;3i&#039; for 3 integers&lt;\/em&gt;\n    format_string = f&#039;{len(arr)}i&#039;\n    \n    &lt;em&gt;# Pack data into binary format&lt;\/em&gt;\n    binary_data = struct.pack(format_string, *arr)\n    \n    print(f&quot;Original array: {arr}&quot;)\n    print(f&quot;Binary data: {binary_data}&quot;)\n    \n    &lt;em&gt;# Check: unpack back&lt;\/em&gt;\n    unpacked_data = struct.unpack(format_string, binary_data)\n    print(f&quot;Unpacked data: {unpacked_data}&quot;)\n    \n    return binary_data\n\n&lt;em&gt;# Example usage&lt;\/em&gt;\nif __name__ == &quot;__main__&quot;:\n    demonstrate_struct_packing(&#091;10, 20, 30])\n<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"4-efficient-serialization-and-deserialization\">4. Efficient serialization and deserialization<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">The&nbsp;<code class=\"\" data-line=\"\">.tobytes()<\/code>&nbsp;and&nbsp;<code class=\"\" data-line=\"\">.frombytes()<\/code>&nbsp;methods allow quickly converting an array to bytes and back, which is ideal for saving to files or transmitting over a network.<\/p>\n\n\n\n<pre class=\"wp-block-code line-numbers\"><code class=\" language-python\" data-line=\"\">import array\n\ndef handle_binary_data() -&gt; None:\n    &quot;&quot;&quot;\n    Demonstrates serialization and deserialization of array.array to bytes.\n    &quot;&quot;&quot;\n    &lt;em&gt;# Create original array&lt;\/em&gt;\n    source_array = array.array(&#039;i&#039;, &#091;1, 2, 3, 4, 5])\n    print(f&quot;Original array: {source_array}&quot;)\n\n    &lt;em&gt;# Serialize array to bytes&lt;\/em&gt;\n    binary_data = source_array.tobytes()\n    print(f&quot;Data in bytes: {binary_data}&quot;)\n\n    &lt;em&gt;# Deserialize from bytes to new array&lt;\/em&gt;\n    new_array = array.array(&#039;i&#039;)\n    new_array.frombytes(binary_data)\n    print(f&quot;Restored array: {new_array}&quot;)\n\n    &lt;em&gt;# Check integrity&lt;\/em&gt;\n    assert source_array == new_array, &quot;Data mismatch!&quot;\n    print(&quot;Data integrity confirmed.&quot;)\n\n&lt;em&gt;# Example usage&lt;\/em&gt;\nif __name__ == &quot;__main__&quot;:\n    handle_binary_data()\n<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"5-guarantee-of-type-homogeneity\">5. Guarantee of type homogeneity<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><code class=\"\" data-line=\"\">array.array<\/code>&nbsp;strictly enforces only one data type, specified at creation. This prevents accidental addition of elements of a different type.<\/p>\n\n\n\n<pre class=\"wp-block-code line-numbers\"><code class=\" language-python\" data-line=\"\">import array\n\ndef demonstrate_type_safety() -&gt; None:\n    &quot;&quot;&quot;\n    Shows that array.array does not allow adding elements of a different type.\n    &quot;&quot;&quot;\n    arr = array.array(&#039;i&#039;, &#091;100, 200, 300])\n    print(f&quot;Integer array: {arr}&quot;)\n    \n    try:\n        &lt;em&gt;# Attempt to add a string element&lt;\/em&gt;\n        arr.append(&#039;hello&#039;)\n    except TypeError as e:\n        &lt;em&gt;# Expected exception&lt;\/em&gt;\n        print(f&quot;\\nAttempt to add &#039;hello&#039; raised an error: {e}&quot;)\n        print(&quot;This confirms strict array typing.&quot;)\n\n&lt;em&gt;# Example usage&lt;\/em&gt;\nif __name__ == &quot;__main__&quot;:\n    demonstrate_type_safety()\n<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"6-direct-writing-and-reading-from-binary-files\">6. Direct writing and reading from binary files<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">The&nbsp;<code class=\"\" data-line=\"\">.tofile()<\/code>&nbsp;and&nbsp;<code class=\"\" data-line=\"\">.fromfile()<\/code>&nbsp;methods simplify working with binary files, avoiding intermediate serialization.<\/p>\n\n\n\n<pre class=\"wp-block-code line-numbers\"><code class=\" language-python\" data-line=\"\">import array\nfrom pathlib import Path\n\ndef work_with_binary_files(file_path_str: str = &quot;data.bin&quot;) -&gt; None:\n    &quot;&quot;&quot;\n    Writes an array to a binary file and reads it back.\n\n    Args:\n        file_path_str (str, optional): File name for saving.\n                                       Defaults to &quot;data.bin&quot;.\n    &quot;&quot;&quot;\n    file_path = Path(file_path_str)\n    source_array = array.array(&#039;f&#039;, &#091;1.5, 2.7, 3.14])\n\n    try:\n        &lt;em&gt;# Write to file&lt;\/em&gt;\n        with file_path.open(&#039;wb&#039;) as f:\n            source_array.tofile(f)\n        print(f&quot;Array {source_array} written to file &#039;{file_path}&#039;.&quot;)\n\n        &lt;em&gt;# Read from file&lt;\/em&gt;\n        new_array = array.array(&#039;f&#039;)\n        with file_path.open(&#039;rb&#039;) as f:\n            &lt;em&gt;# Read 3 elements of type &#039;f&#039; (float)&lt;\/em&gt;\n            new_array.fromfile(f, len(source_array))\n        print(f&quot;Array {new_array} read from file.&quot;)\n        \n        assert source_array == new_array\n\n    finally:\n        &lt;em&gt;# Guaranteed file deletion after execution&lt;\/em&gt;\n        if file_path.exists():\n            file_path.unlink()\n            print(f&quot;Temporary file &#039;{file_path}&#039; deleted.&quot;)\n\n&lt;em&gt;# Example usage&lt;\/em&gt;\nif __name__ == &quot;__main__&quot;:\n    work_with_binary_files()\n<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"-comparative-table-arrayarray-vs-list\">\ud83d\udd39 Comparative table:&nbsp;<code class=\"\" data-line=\"\">array.array<\/code>&nbsp;vs&nbsp;<code class=\"\" data-line=\"\">list<\/code><\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th class=\"has-text-align-left\" data-align=\"left\">Characteristic<\/th><th class=\"has-text-align-left\" data-align=\"left\"><code class=\"\" data-line=\"\">array.array<\/code><\/th><th class=\"has-text-align-left\" data-align=\"left\"><code class=\"\" data-line=\"\">list<\/code><\/th><\/tr><\/thead><tbody><tr><td class=\"has-text-align-left\" data-align=\"left\"><strong>Data type<\/strong><\/td><td class=\"has-text-align-left\" data-align=\"left\">Homogeneous primitives (numbers, characters)<\/td><td class=\"has-text-align-left\" data-align=\"left\">Any Python objects<\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\"><strong>Memory<\/strong><\/td><td class=\"has-text-align-left\" data-align=\"left\">Low consumption<\/td><td class=\"has-text-align-left\" data-align=\"left\">High consumption<\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\"><strong>Performance<\/strong><\/td><td class=\"has-text-align-left\" data-align=\"left\">High for numerical operations<\/td><td class=\"has-text-align-left\" data-align=\"left\">Lower for numerical operations<\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\"><strong>API<\/strong><\/td><td class=\"has-text-align-left\" data-align=\"left\">Limited set of methods<\/td><td class=\"has-text-align-left\" data-align=\"left\">Rich and flexible API<\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\"><strong>C compatibility<\/strong><\/td><td class=\"has-text-align-left\" data-align=\"left\">High, direct data transfer<\/td><td class=\"has-text-align-left\" data-align=\"left\">Conversions required<\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\"><strong>Binary serialization<\/strong><\/td><td class=\"has-text-align-left\" data-align=\"left\">Built-in methods (<code class=\"\" data-line=\"\">.tobytes<\/code>,&nbsp;<code class=\"\" data-line=\"\">.tofile<\/code>)<\/td><td class=\"has-text-align-left\" data-align=\"left\">Requires&nbsp;<code class=\"\" data-line=\"\">struct<\/code>,&nbsp;<code class=\"\" data-line=\"\">pickle<\/code>&nbsp;etc.<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Conclusion:<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\ud83d\ude80 Use&nbsp;<code class=\"\" data-line=\"\">array.array<\/code>&nbsp;when working with large volumes of&nbsp;<strong>homogeneous numerical data<\/strong>, and when&nbsp;<strong>performance<\/strong>&nbsp;and&nbsp;<strong>efficient memory usage<\/strong>&nbsp;are critical for you.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">For most everyday tasks where flexibility and storage of heterogeneous data are required,&nbsp;<code class=\"\" data-line=\"\">list<\/code>&nbsp;remains the best choice.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Il modulo array fornisce un tipo di dato specializzato, array.array, per memorizzare sequenze di numeri omogenei. A differenza della list universale, gli array di tipo array.array offrono un uso pi\u00f9 efficiente della memoria e prestazioni superiori quando si lavora con dati numerici.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"neve_meta_sidebar":"","neve_meta_container":"","neve_meta_enable_content_width":"","neve_meta_content_width":0,"neve_meta_title_alignment":"left","neve_meta_author_avatar":"on","neve_post_elements_order":"[\"content\",\"tags\",\"comments\"]","neve_meta_disable_header":"","neve_meta_disable_footer":"","neve_meta_disable_title":"","_themeisle_gutenberg_block_has_review":false,"footnotes":""},"categories":[1],"tags":[],"class_list":["post-2577","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"acf":[],"_links":{"self":[{"href":"https:\/\/it.davidka.net\/it\/wp-json\/wp\/v2\/posts\/2577","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/it.davidka.net\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/it.davidka.net\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/it.davidka.net\/it\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/it.davidka.net\/it\/wp-json\/wp\/v2\/comments?post=2577"}],"version-history":[{"count":0,"href":"https:\/\/it.davidka.net\/it\/wp-json\/wp\/v2\/posts\/2577\/revisions"}],"wp:attachment":[{"href":"https:\/\/it.davidka.net\/it\/wp-json\/wp\/v2\/media?parent=2577"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/it.davidka.net\/it\/wp-json\/wp\/v2\/categories?post=2577"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/it.davidka.net\/it\/wp-json\/wp\/v2\/tags?post=2577"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}